我想解析一个文本文件中的字符串。问题是,在同一个文件中,字符串被单引号('
)、双引号("
)或三个单引号('''
)括起来。目前为止,我能得到的最好结果是使用以下代码:
((?<=["])(.*?)(?=["]))|((?<=['])(.*?)(?=[']))
仅匹配单引号和双引号之间的单行字符串。请注意,文件中的字符串括在每种类型的引号中,可以是单行或多行,并且每种类型的字符串在文件中重复多次。
下面是一个示例字符串:
<thisisthefirststring
'''- This is the first line of text
- This is the second line of text
- This is the third line of text
'''
>
<thisisanotheroption
"Just a string between quotes"
>
<thisisalsopossible
'Single quotes
Multiple lines.
With blank lines in between
'
>
<lineBreaksDoubleQoutes
"This is the first sentence here
After the first sentence, comes the blank line, and then the second one."
>
5条答案
按热度按时间camsedfj1#
使用此选项:
Test it online
使用组引用
\1
,可以简化工作此外,要仅获取引号 * 内 * 的内容,请使用匹配的第2组
w6lpcovy2#
此正则表达式:
('{3}|["']{1})([^'"][\s\S]+?)\1
做你想做的事。
一些结果:
5rgfhyps3#
使用记事本++,您可以用途:
('''|'|")((?:(?!\1).)+)\1
说明:
下面是结果的屏幕截图。
ej83mcc04#
这里有一些东西可能对你有用。
用三个单引号替换三个双引号。请在regex101.com上查看它的实际操作。
rhfm7lfc5#
命名组版本
通过显式引用存储最后找到的引号的组的名称,避免在较大的表达式中使用时出现问题。
适用于大多数系统:
.NET版本:
工作方式如下:
'''|'|"
:首先检查'''
,然后检查'
,最后检查"
。按此顺序执行,因此'''
的优先级高于'
。(?<Qt>'''|'|"")
:匹配后,将匹配项放在<Qt>
中以供以后使用。(.*?)
:捕获对0个或多个.*?
内容的延迟搜索的结果-将返回空字符串。若要防止返回空字符串,请更改为对1个或多个.+?
内容的延迟搜索。\k<Qt>
:搜索上次存储在<Qt>
中的值。