【问题标题】:Python regular expression to match a pattern when preceded by either start of line or whitespace [duplicate]Python正则表达式在行首或空格之前匹配模式[重复]
【发布时间】:2016-03-25 22:06:36
【问题描述】:

我想编写一个匹配单词hello 的正则表达式,但仅当它开始一行或前面有空格时。如果它在那里,我不想匹配空格......我只需要知道它(或行首)在那里。

所以我试过了:

r = re.compile('hello(?<=\s|^)')

但这会引发:

error: look-behind requires fixed-width pattern

举个例子,如果我要搜索的字符串是:

s = 'hello world hello thello'

然后我希望我的正则表达式匹配两次...在下面大写的位置:

'HELLO world HELLO thello'

第一个匹配是因为它前面是行首,而第二个匹配是因为它前面有一个空格。最后 5 个字符将不匹配,因为它们前面有 t

【问题讨论】:

  • re.findall(r'\bhello\b', s) 怎么样?
  • 为什么按原样编写它会起作用,但如果在正则表达式字符串之前省略r,则会失败?
  • 没有r\b 被视为退格符号。
  • 那么python中的正则表达式应该总是作为原始字符串输入吗?
  • 这是最佳实践。

标签: python regex


【解决方案1】:

(?:(?&lt;=\s)|^)hello 将是您想要的。后视需要在正则表达式的开头;它必须确实是固定宽度 - \s 是 1 个字符宽,而 ^ 是 0 个字符,因此您不能将它们与 | 组合使用。在这种情况下我们不需要,我们只需交替使用(?&lt;=\s)^

请注意,这两个仍然匹配 hellooo;如果这不可接受,您必须在末尾添加\b

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多