RegEx用于匹配除以加号开头的单词之外的所有内容

时间:2019-05-25 08:58:43

标签: regex replace regex-lookarounds regex-group regex-greedy

示例字符串: +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)找到正则表达式。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:4)

使用:

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

Demo

答案 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

替换:''

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

答案 3 :(得分:0)

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

  1. 替换:$1$2$3
    结果:+Z +DD +I +M +A

  1. 替换:$2$3
    结果:Z DD I M A