为了防止有人浪费时间提供另一种解决方案,我必须使用正则表达式来完成这项任务。
我试图写一个正则表达式来匹配一个前缀为“〈”(AND OR)后缀为“〉”的基本单词,但如果基本单词既没有前缀也没有后缀,则不匹配。
这不是一个简单的匹配“〈”或“〉”的情况,因为这个字符可能会改变或成为一个组的一部分。
例如。
对于本例,基本单词组是(base|正文|在真实的生活中,这个列表可能很长。
在输入文本文件中的这些候选项中…
text
<text
text>
<text>
……我想匹配以下内容……
<text
text>
<text>
...但不匹配...
text
在英语口语中,我的RegEx正在寻找任何前缀为“〈”(AND OR)后缀为“〉”的基本单词,但如果它没有前缀/后缀,则不匹配基本单词。
如上所述,这不是匹配文字“〈”或“〉”的情况,因为这些字符可以是不同的或者是组的一部分。
在我所做的所有尝试中,如果没有前缀或后缀,我就无法在不捕获基本单词的情况下使其工作。
当我在做这个问题的时候变得越来越慌乱,我没能保留我以前所有的尝试。我的努力对这里的任何人都没有价值,因为他们都失败了,当我用完了想法,我最终只能猜测。
以下是一些例子。(text)
=这将捕获“text”(\<)(text)
=这将捕获“〈text”(text)(/>)
=这将捕获“text〉”(\<)(text)(/>)
=这将捕获““(\<|)(text)(|/>)
=这是最接近的,因为它将捕获“〈text”“text〉”““,但它也将捕获“text”。
我也尝试过look-around和look-behind,但我无法通过look-behind跳过基本单词来查看是否有前缀。
唯一的解决方法是使用2个RegEx。第一个查找(\<)(text)
,第二个查找(text)(/>)
,但是这意味着运行RegEx两次,效率很低,我真的很想解决这个问题。
我已经提供了一个独立的自定义可执行文件(窗口)来运行这些RegEx的,我不知道它使用什么RegEx引擎,但常见的RegEx命令似乎工作正常。
谢谢你,任何帮助将不胜感激。
3条答案
按热度按时间gwbalxhn1#
你可以用
参见regex demo。
(<)?
-组1(可选):可选匹配<
text
-匹配text
字符串(?(1)>?|>)
-条件构造:如果组1匹配,则匹配可选>
字符,否则必须匹配>
。如果你需要使用单词边界,就像在
1mrurvl12#
使用两个备选方案:
这将匹配
<text
或text>
。它也将匹配<text>
,因为它包含<text
。这假设你只是测试字符串是否包含匹配,而不是试图返回匹配的部分。在后一种情况下,可选地将另一个括号添加到其中一个选项中:
第一个替代匹配
<text
或<text>
,第二个替代匹配text>
。9q78igpj3#
我的问题已经得到了回答。
这款Wiktor Stribiđew的RegEx
(\<)?text(?(1)\>?|\>)
非常完美。谢谢大家。