用于匹配除以加号开头的单词以外的所有内容的正则表达式

RegEx for matching everything except words starting with a plus sign

示例字符串: +Z XA( 0,1,6,22,26,33,34,35,36,25,24) +DD +I +M >x1 >bdz +A

结果应该是: +Z +DD +I +M +A 要么 Z DD I M A

正则表达式 (\+\w+) 似乎找到了所有标记,但我不知道如何定义替换模式。我想删除所有其他内容。

我使用 Omnis7,但正则表达式引擎是一个编译的 Delphi 库,我用它来扩展 Omnis7。正则表达式引擎是正则表达式的完整实现。我尝试使用在线正则表达式工具 (regex101.com) 查找正则表达式。

如何解决这个问题?

这是一种方法

查找(?:(?!\+\w)[\S\s])*\+(\w+)(?:(?!\+\w)[\S\s])*
替换 </code></p> <p><a href="https://regex101.com/r/MAW3fT/1" rel="nofollow noreferrer">https://regex101.com/r/MAW3fT/1</a></p> <p>展开</p> <pre><code> (?: (?! \+ \w ) [\S\s] )* \+ ( \w+ ) # (1) (?: (?! \+ \w ) [\S\s] )*


虽然另一个答案看起来很简单,但比这个慢 2 倍。

基准测试

Regex1:   (\+\w+\h?)|.+?
Options:  < none >
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   49
Elapsed Time:    2.06 s,   2056.43 ms,   2056428 µs
Matches per sec:   1,191,386


Regex2:   (?:(?!\+\w)[\S\s])*\+(\w+)(?:(?!\+\w)[\S\s])*
Options:  < none >
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   5
Elapsed Time:    1.00 s,   997.28 ms,   997281 µs
Matches per sec:   250,681

需要注意的是它们都匹配正确,所以经过的时间
这里是钟声天气。我的正则表达式花了一半时间。

使用:

  • 查找:(\+\w+\h?)|.
  • 替换:

Demo

刚刚确定了一个潜在的模式,但发现您已经找到了答案。尽管如此,这里还是有一个建议。

查找:(?<![+\w])[^+][\w\W]+?\s

替换:''

https://regex101.com/r/cXceQO/1/

感谢大家。 我试了一下,找到了确切的解决方案:
搜索:+Z XA( 0,1,6,22,26,33,34,35,36,25,24) +DD +I +M >x1 >bdz +A
查找:(\+)(\w+\h?)(.?)|.

  1. 替换:</code><br> 结果:<code>+Z +DD +I +M +A

  1. 替换:</code><br> 结果:<code>Z DD I M A