Regex 引述演辞的正则表达式
我提出了以下正则表达式,以便能够从文本中提取引号:Regex 引述演辞的正则表达式,regex,Regex,我提出了以下正则表达式,以便能够从文本中提取引号: "(?P<quote>.+?(?<![^\\]\\))" 但是这给了我一个错误,“*一个在lookback中的量词使它成为非固定宽度”。另一个是: "[^((\\{2})*")]+" 但这也与转义引号不匹配。这可以在不使用惰性量词和lookbehind的情况下完成: “(?(?:[^”\\].*)” 这项工作如下: (?:[^“\\]\;(?:\\[“\\])*多次匹配以下任一选项 [^“\\]-选项1:匹配除\或
"(?P<quote>.+?(?<![^\\]\\))"
但是这给了我一个错误,“*一个在lookback中的量词使它成为非固定宽度”
。另一个是:
"[^((\\{2})*")]+"
但这也与转义引号不匹配。这可以在不使用惰性量词和lookbehind的情况下完成:
“(?(?:[^”\\].*)”
这项工作如下:
多次匹配以下任一选项(?:[^“\\]\;(?:\\[“\\])*
-选项1:匹配除[^“\\]
或\
“
-选项2:匹配(?:\\[“\\])*
,后跟\
或\
,任意次数“
- 这与下列情况相匹配:
、\\\\
、\\\\\\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/code>、
\\\\\\\\\\\\\\\\\\\\\/code>等
- 如果您希望它也匹配像
这样的情况,请将\a
更改为\\[“\\\]
\\。
- 这与下列情况相匹配:
lookbehind的问题(给您一个错误,
“*lookbehind中的量词使其成为非固定宽度”
)是因为您使用的正则表达式引擎不允许变量lookbehind
一些正则表达式引擎允许这样做(例如.NET的正则表达式引擎),但大多数不支持这样做(例如PCRE不支持)。为了避免这种情况,一些正则表达式引擎允许使用令牌\K
,允许您重设匹配(?:\\{2})*\K
还有一个类似的正则表达式。可能是最有效的模式。
"[^((\\{2})*")]+"
"(?<quote>(?:[^"\\]|(?:\\["\\])*)*)"