regex 匹配单引号、双引号和三引号之间的文本的正则表达式

n6lpvg4x  于 2022-11-18  发布在  其他
关注(0)|答案(5)|浏览(144)

我想解析一个文本文件中的字符串。问题是,在同一个文件中,字符串被单引号(')、双引号(")或三个单引号(''')括起来。目前为止,我能得到的最好结果是使用以下代码:

((?<=["])(.*?)(?=["]))|((?<=['])(.*?)(?=[']))

仅匹配单引号和双引号之间的单行字符串。请注意,文件中的字符串括在每种类型的引号中,可以是单行或多行,并且每种类型的字符串在文件中重复多次。
下面是一个示例字符串:

<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."
>
camsedfj

camsedfj1#

使用此选项:

((?:'|"){1,3})([^'"]+)\1

Test it online
使用组引用\1,可以简化工作
此外,要仅获取引号 * 内 * 的内容,请使用匹配的第2组

w6lpcovy

w6lpcovy2#

此正则表达式:('{3}|["']{1})([^'"][\s\S]+?)\1
做你想做的事。
一些结果:

5rgfhyps

5rgfhyps3#

使用记事本++,您可以用途:('''|'|")((?:(?!\1).)+)\1

说明:

('''|'|")           : group 1, all types of quote 
(                   : group 2
    (?:(?!\1).)+    : any thing that is not the quote in group 1
)                   : end group 2
\1                  : back reference to group 1 (i.e. same quote as the beginning)

下面是结果的屏幕截图。

ej83mcc0

ej83mcc04#

这里有一些东西可能对你有用。

^(\"([^\"\n\\]|\\[abfnrtv?\"'\\0-7]|\\x[0-9a-fA-F])*\"|'([^'\n\\]|\\[abfnrtv?\"'\\0-7]|\\x[0-9a-fA-F])*'|\"\"\"((?!\"\"\")[^\\]|\\[abfnrtv?\"'\\0-7]|\\x[0-9a-fA-F])*\"\"\")$

用三个单引号替换三个双引号。请在regex101.com上查看它的实际操作。

rhfm7lfc

rhfm7lfc5#

命名组版本

通过显式引用存储最后找到的引号的组的名称,避免在较大的表达式中使用时出现问题。

适用于大多数系统:

(?<Qt>'''|'|")(.*?)\k<Qt>

.NET版本:

(?<Qt>'''|'|"")(.*?)\k<Qt>

工作方式如下:

  1. '''|'|":首先检查''',然后检查',最后检查"。按此顺序执行,因此'''的优先级高于'
  2. (?<Qt>'''|'|""):匹配后,将匹配项放在<Qt>中以供以后使用。
  3. (.*?):捕获对0个或多个.*?内容的延迟搜索的结果-将返回空字符串。若要防止返回空字符串,请更改为对1个或多个.+?内容的延迟搜索。
  4. \k<Qt>:搜索上次存储在<Qt>中的值。

相关问题