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