我有一个正则表达式:
\]\s*(AN|AV)\s*1\s*([\w\s]+)\s*2\s*([\w\s]+)\s*3\s*([\w\s][^cui]+)
这应该匹配
] AN 1 words 2 words 3 words
或
] AV 1 words 2 words 3 words
3后面的单词应该排除“dacui”,所以"da\scui"
,但它不起作用。在这里试试:https://regex101.com/r/kI7Tan/1
我做错了什么
示例字符串:
campo] AN 1 campo 2 prato con penna B sps a 1 3 da cui campo con penna C as a 1 cfr Nota filologica
预期输出:由于“da cui”的原因,它将不匹配。因此,基本上我想匹配所有单词,而不需要字符串“dacui”
您可以使用以下两种方法之一:
见regex demo
(?:(?!cui).)*
是一个tempered greedy token匹配任何字符、0次或多次出现(尽可能多)的字符序列,它不启动cui
字符序列。(.*?)(?=cui|$)
模式捕获0+个字符(换行字符除外),尽可能少,直到cui
字符序列或字符串结尾正则表达式(
([\w\s][^cui]+)
)的最终捕获组与\s*
,此类与空白不匹配李>c
、u
、i
以外的任意数量的字符李>如果要排除取决于单词
da cui
的匹配项,请使用负前瞻见demo (regex101)
更新
捕获组重新引入正则表达式
我对这个问题的解释是,如果字符串
3
后面的一个或多个空格(到行尾),那么如果该字符串中存在一个空字符串,则将该字符串保存到捕获组4,否则该字符串将保存到捕获组4您可以使用以下正则表达式
Demo
这将OP的正则表达式中的
3\s*([\w\s][^cui]+)
替换为3\s+((?=.*\bda cui\b)|(?!=.*\bda cui\b).*)
Python的正则表达式引擎在匹配
3
之后执行以下步骤如果正向前瞻成功,则会将空字符串保存到捕获组
相关问题 更多 >
编程相关推荐