示例字符串:
+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,但是正则表达式引擎是我用来扩展Omnis7的已编译Delphi库。 regex引擎是regex的完整实现。我试图通过在线正则表达式工具(regex101.com)找到正则表达式。
我该如何解决这个问题?
答案 0 :(得分:4)
答案 1 :(得分:2)
这是一种实现方法
找到(?:(?!\+\w)[\S\s])*\+(\w+)(?:(?!\+\w)[\S\s])*
替换$1
https://regex101.com/r/MAW3fT/1
扩展
(?:
(?! \+ \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
要注意的是它们都正确匹配,所以经过的时间
这里是贝尔的天气。我的正则表达式花了一半的时间。
答案 2 :(得分:0)
只是设法确定了一个潜在的模式,但看到您已经找到了答案。不过,这是一个建议。
查找:(?<![+\w])[^+][\w\W]+?\s
替换:''
答案 3 :(得分:0)
感谢所有人。
我玩了一下,找到了确切的解决方案:
搜索:+Z XA( 0,1,6,22,26,33,34,35,36,25,24) +DD +I +M >x1 >bdz +A
查找:(\+)(\w+\h?)(.?)|.
$1$2$3
+Z +DD +I +M +A
或
$2$3
Z DD I M A