【问题标题】:regex subtraction正则表达式减法
【发布时间】:2012-05-30 07:42:09
【问题描述】:

是否可以在 GNU sed、GNU awk、GNU grep 或 bash 的其他任何地方以某种方式使用正则表达式字符类减法?

C++11 支持吗?

哪些地方支持此功能?除了这个之外,我找不到任何参考资料:http://msdn.microsoft.com/en-us/library/20bw873z.aspx(在底部)。

更具体地说:将除 2 和 5 之外的所有数字转换为星号的最佳方法是什么,例如

sed -re 's/[0-9-[25]]/*/g'

【问题讨论】:

  • 目标语言是什么? C++? C#?每种语言对正则表达式的支持程度不同。
  • bash 和 c++11。 «bash» 也表示 sed、grep、tr、awk……

标签: c++ regex bash c++11 regex-negation


【解决方案1】:

是否可以在 GNU sed、GNU awk、GNU grep 或 bash 的其他任何地方以某种方式使用正则表达式字符类减法?

不,不是那些工具/正则表达式实现。

大多数(流行)语言不支持此功能。 Java 有办法做到这一点:[0-9&&[^25]](匹配除'2''5' 之外的任何(ASCII)数字),但我知道没有其他实现支持这一点。

如 Ignacio 已经建议的那样,要么使用负前瞻 (?![25])[0-9],要么“艰难地”这样做:[1346-9]

见:

【讨论】:

  • 谢谢,你的链接很有趣。
【解决方案2】:

这样做的方法是使用负前瞻,但并非所有正则表达式引擎都支持它们。

>>> re.match(r'(?![25])[0-9]', '2')
>>> re.match(r'(?![25])[0-9]', '3')
<_sre.SRE_Match object at 0x25108b8>

【讨论】:

    猜你喜欢
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多