Regex 将字符串匹配为符号,并将其设置为可选。也不要捕获匹配的可选字符串

Regex 将字符串匹配为符号,并将其设置为可选。也不要捕获匹配的可选字符串,regex,optional-parameters,regex-greedy,regex-lookarounds,Regex,Optional Parameters,Regex Greedy,Regex Lookarounds,匹配以a结尾的字符串;将其设置为可选,不要捕获该组,因为它不是必需的。但是一定要捕获在第一个条件之后出现的字符串的其余部分 text 1:无法从源传输;snapmirror可能配置错误,源卷可能正忙或不可用 text 2:可能修改snapmirror,目标卷不可用 期望输出: snapmirror可能配置错误,源卷可能正忙或不可用 可能会修改snapmirror,但目标卷不可用 我希望我的正则表达式查找“从源传输不可能”或分号之前以这种方式出现的任何字符串,我希望我的正则表达式不要将其作为一个组

匹配以a结尾的字符串;将其设置为可选,不要捕获该组,因为它不是必需的。但是一定要捕获在第一个条件之后出现的字符串的其余部分

text 1:无法从源传输;snapmirror可能配置错误,源卷可能正忙或不可用

text 2:可能修改snapmirror,目标卷不可用

期望输出:

snapmirror可能配置错误,源卷可能正忙或不可用

可能会修改snapmirror,但目标卷不可用

我希望我的正则表达式查找“从源传输不可能”或分号之前以这种方式出现的任何字符串,我希望我的正则表达式不要将其作为一个组捕获

另外,我想捕捉分号之后直到结尾发生的一切

已尝试正则表达式:?:*;?。+\*


上述正则表达式适用于Text1,但不适用于Text2。有人帮我解决这个问题吗?

在我看来,你的正则表达式应该可以工作,但它可能可以改进

比赛应该总是从字符串的开头开始吗?这是一个骗人的问题;如果你不能做出这样的假设,这个问题就毫无意义

会有不止一个分号吗?如果是,您希望非捕获部分仅扩展到第一个部分,还是扩展到最后一个部分

它应该总是在字符串的末尾结束,还是只想匹配句点?会有不止一个周期吗

这个改动最小的正则表达式似乎可以满足您的需要,添加的锚定可能会提高性能,足以满足您的需要:

^(?:.*?;\s*)?(.+)\..*$
这个应该快得多;用否定字符类[^;]*和[^.]+替换。*几乎完全消除了回溯:

^(?:[^;]*;\s*)?([^.]+)
如果您使用的是支持它们的正则表达式风格,则原子组和所有格量词可以使其更快:

^(?>[^;]*+;\s*+)?+([^.]++)

?:.*;? .+\..* 这是我用的正则表达式。你用的正则表达式看起来像是一个带钩子的怪物和他的伙伴。事实上,那个正则表达式是我用的另一个正则表达式的最后一点。你能给我推荐一个更好的吗?我想我修复了可选的捕获。我需要一个关于捕获所需字符串其余部分的建议。比如说用哪一个来捕捉?我觉得你的很好。它不起作用吗?我以为你是说你解决了这个问题。编辑:我看到你的编辑。让我看看……将文本拆分为;无论您使用什么编程语言,然后获取该数组的最后一个索引无疑是最快的方法。谢谢Alan。非常有用的提示。我认为你建议的正则表达式应该比我以前的工作正则表达式有很大帮助。