【问题标题】:Match lines with possible preceding whitespaces匹配可能有前面空格的行
【发布时间】:2015-06-13 13:20:43
【问题描述】:

在Emacs中,我想用正则表达式来匹配诸如

之类的行
List of symbols
 List of symbols
   List of symbols

不匹配以数字或((前面有零个或多个空格)开头的行,例如

1. Arithmetic and Algebra
 1. Arithmetic and Algebra
(a) Powers
 (a) Powers

^ *[^[:digit:](]^[[:space:]]*[^[:digit:](] 都可以匹配

 1. Arithmetic and Algebra
 (a) Powers

每行开头都有一个空格。

我想知道我错在哪里?谢谢。

【问题讨论】:

    标签: regex emacs


    【解决方案1】:

    您可能可以将其简化为匹配以数字开头的行
    或开括号。

    ^[^[:digit:](]

    【讨论】:

      【解决方案2】:

      为什么会这样?

      因为回溯!

      • 由于" "(空格) 可以出现0 or more 次,它假定0 是一个以space 开头的字符,下一个字符是non digit(现在是一个空格)。因此,它在开头将模式与空格匹配。

      如何克服?

      使用*+ (贪婪和占有)..这将使*(贪婪)possessive

      工作正则表达式:

      ^ *+[^[:digit:](\s]
         ↑
      

      DEMO

      【讨论】:

      • 现在这个正则表达式将正确匹配该行的第一个非空格符号,在它之后添加 .* 以匹配其余部分,除非我缺少特定语言的内容。不过答案很好。
      • 在 emacs 正则表达式中,\s deos 不代表空白。 ^ *+[^[:digit:](]^ *[^[:digit:](] 工作方式相同。
      • 谢谢。 (1) ^ *+[^[:digit:]([:space:]]^ *[^[:digit:]([:space:]] 都有效。为什么占有欲不重要? (2) 没有所有格的正则表达式总是回溯吗?
      • @Tim (1) 那是因为您将space 包含在非匹配组中。(2) 是的,没有所有格,它会在任何情况下尝试回溯并匹配模式。
      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      相关资源
      最近更新 更多