【问题标题】:Regex: Match variable amount of characters based on previous group length正则表达式:根据先前的组长度匹配可变数量的字符
【发布时间】:2016-01-05 12:49:38
【问题描述】:

我正在寻找一个正则表达式(一个 (e)grep 正则表达式)来匹配以下字符串;模式是E 的数量少于或等于前一组 E 的数量。”

示例:

应该匹配:EEEEEEE EEE EE EE E

不应匹配:E EE EE E EEEE

我想尝试一些否定的方法,但结果并没有达到预期..

【问题讨论】:

  • 您尝试了什么,又是如何失败的?你用的是什么正则表达式?
  • 在 (e)grep 中工作,补充说抱歉。我尝试做一些类似 (E*)\s(\1)E*\s(\2)E* (等等)的反向操作;但后来发现这不是解决方案,因为我不知道字符串的长度,而且无论如何它似乎都是错误的
  • 你知道给定字符串中有多少组E字符吗?
  • 不,这就是我的方法行不通的原因。
  • 这是一道考试题,@stribizhev 只能使用 grep/egrep,所以一定有可能

标签: regex grep regex-negation regex-lookarounds


【解决方案1】:
echo 'EEEEEEE EEE EE EE E' | egrep -v '\b(E+)\b.*\1E' # => EEEEEEE EEE EE EE E
echo 'E EE EE E EEEE' | egrep -v '\b(E+)\b.*\1E' # => no matches

这个想法是,在获取完整的Es (\b(E+)\b) 序列后,不应再出现相同序列加上另一个E (\1E)。显然,我们使用-v 来否定。

【讨论】:

    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    相关资源
    最近更新 更多