28

我正在尝试编写一个正则表达式,它匹配以连字符 (-) 开头的行或以空格或制表符开头然后有一个连字符的行。所以它应该匹配以下内容:

- hello!
            - hello!

这是我到目前为止所得到的:^(\-)。但这与上面的第二个示例不匹配,因为它要求第一个字符是连字符。

4

3 回答 3

60

你可以试试

^\s*-
  • ^: 字符串的开始
  • \s*: 零个或多个空白字符
  • -: 文字-(你不需要在字符类之外转义它)
于 2013-10-09T14:13:17.483 回答
7

您可以通过在开头使 0 个或多个空格可选匹配来使用此正则表达式:

^\s*-
于 2013-10-09T14:13:27.280 回答
0

上面的(使用 \s*)对于这种情况是最简单的,但一般来说,你总是可以使用 | 句法:

re.match('^-|^\s+-', '- hello')
<_sre.SRE_Match object at 0x0000000054E72030>

re.match('^-|^\s+-', '     - hello')
<_sre.SRE_Match object at 0x0000000054E72030>

re.match('^-|^\s+-', '     + hello')
None

^-是 - 开头的情况,`^\s+-' 有一个或多个空格,而 | 选择其中之一。

于 2013-10-09T14:22:24.463 回答