匹配线与可能的前面的空格

时间:2015-06-13 13:20:43

标签: regex emacs

在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

每行开头都有空格。

我想知道我哪里错了?感谢。

2 个答案:

答案 0 :(得分:1)

您可以将其缩小为匹配以数字开头的行 或括号括起来。

^[^[:digit:](]

答案 1 :(得分:0)

  

为什么会这样?

因为回溯!

  • 由于" "(空格)可以0 or more次出现,因此对于以0开头且下一个字符为space的字段为non digit(这是*+现在是一个空间)。因此,它在开始时将模式与空间相匹配。
  

如何克服?

使用* (贪婪和占有) ..这将使possessive(贪婪)^ *+[^[:digit:](\s] ↑

工作正则表达式:

<?xml version="1.0"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ExtensionData />
  <Name>ali</Name>
  <Age>37</Age>
  <Father>
    <ExtensionData />
    <Name>I</Name>
    <Age>72</Age>
  </Father>
  <Mother>
    <ExtensionData />
    <Name>M</Name>
    <Age>62</Age>
  </Mother>
</Person>

请参阅DEMO