条件正则表达式匹配前缀(和或)后缀但不匹配两者都不是的单词

问题描述 投票:0回答:2

为了防止有人浪费时间提供替代解决方案,我必须使用正则表达式来完成这项任务。

我正在尝试编写一个正则表达式来匹配具有前缀“<" (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 命令似乎工作正常。

谢谢您,我们将不胜感激。

regex match prefix suffix
2个回答
0
投票

使用两种选择:

<text|text>

这将匹配

<text
text>
。它也会匹配
<text>
,因为它包含
<text
.

这假设您只是在测试字符串是否包含匹配项,而不是您试图返回匹配的部分。在后一种情况下,可选择将另一个括号添加到其中一个备选方案中:

<text>?|text>

第一个备选匹配

<text
<text>
,第二个备选匹配
text>
.


0
投票

我的问题已经得到解答

Wiktor Stribiżew 的这个 RegEx

(\<)?text(?(1)\>?|\>)
完美运行。

谢谢大家

© www.soinside.com 2019 - 2024. All rights reserved.