用于匹配除以加号开头的单词以外的所有内容的正则表达式
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?)|.
- 替换:
刚刚确定了一个潜在的模式,但发现您已经找到了答案。尽管如此,这里还是有一个建议。
查找:(?<![+\w])[^+][\w\W]+?\s
替换:''
感谢大家。
我试了一下,找到了确切的解决方案:
搜索:+Z XA( 0,1,6,22,26,33,34,35,36,25,24) +DD +I +M >x1 >bdz +A
查找:(\+)(\w+\h?)(.?)|.
- 替换:
</code><br>
结果:<code>+Z +DD +I +M +A
或
- 替换:
</code><br>
结果:<code>Z DD I M A
示例字符串:
+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?)|.
- 替换:
刚刚确定了一个潜在的模式,但发现您已经找到了答案。尽管如此,这里还是有一个建议。
查找:(?<![+\w])[^+][\w\W]+?\s
替换:''
感谢大家。
我试了一下,找到了确切的解决方案:
搜索:+Z XA( 0,1,6,22,26,33,34,35,36,25,24) +DD +I +M >x1 >bdz +A
查找:(\+)(\w+\h?)(.?)|.
- 替换:
</code><br> 结果:<code>+Z +DD +I +M +A
或
- 替换:
</code><br> 结果:<code>Z DD I M A