条件RegEx匹配前缀(和或)后缀,但不匹配两者都不带的单词

bxgwgixi  于 2023-04-22  发布在  其他
关注(0)|答案(3)|浏览(103)

为了防止有人浪费时间提供另一种解决方案,我必须使用正则表达式来完成这项任务。
我试图写一个正则表达式来匹配一个前缀为“〈”(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命令似乎工作正常。
谢谢你,任何帮助将不胜感激。

gwbalxhn

gwbalxhn1#

你可以用

(<)?text(?(1)>?|>)

参见regex demo

  • 详情 *:
  • (<)?-组1(可选):可选匹配<
  • text-匹配text字符串
  • (?(1)>?|>)-条件构造:如果组1匹配,则匹配可选>字符,否则必须匹配>

如果你需要使用单词边界,就像在

(<)?\btext\b(?(1)>?|>)
1mrurvl1

1mrurvl12#

使用两个备选方案:

<text|text>

这将匹配<texttext>。它也将匹配<text>,因为它包含<text
这假设你只是测试字符串是否包含匹配,而不是试图返回匹配的部分。在后一种情况下,可选地将另一个括号添加到其中一个选项中:

<text>?|text>

第一个替代匹配<text<text>,第二个替代匹配text>

9q78igpj

9q78igpj3#

我的问题已经得到了回答。
这款Wiktor Stribiđew的RegEx (\<)?text(?(1)\>?|\>)非常完美。
谢谢大家。

相关问题