【问题标题】:Python Regex Word Boundaries not working as expected [duplicate]Python Regex Word Boundaries 未按预期工作 [重复]
【发布时间】:2014-09-06 01:06:57
【问题描述】:

为什么边界这个词不起作用?

阅读this site,我知道单词边界是这样的:

有资格作为单词边界的三个不同位置:

  • 在字符串的第一个字符之前,如果第一个字符是单词字符。
  • 在字符串的最后一个字符之后,如果最后一个字符是单词字符。
  • 字符串中两个字符之间,一个是单词字符,另一个不是单词字符。

下面的a 字符串似乎至少适合上面列出的位置之一。

a = 'Builders Club The Ohio State'
re.sub('\bThe\b', '', a, flags=re.IGNORECASE)

输出。 “The”没有变化。

'Builders Club The Ohio State'

为什么边界这个词不起作用?

当我在 ' The ' 模式前后放置空格时,正则表达式似乎可以工作。

a = 'Builders Club The Ohio State'
re.sub(' The ', ' ', a, flags=re.IGNORECASE)

输出:

'Builders Club Ohio State'

【问题讨论】:

    标签: python regex


    【解决方案1】:

    您需要为您的正则表达式模式(不处理转义序列)使用raw-string

    >>> import re
    >>> a = 'Builders Club The Ohio State'
    >>> re.sub(r'\bThe\b', '', a, flags=re.IGNORECASE)
    'Builders Club  Ohio State'
    >>>
    

    否则,\b 将被解释为退格字符:

    >>> print('x\by')
    y
    >>> print(r'x\by')
    x\by
    >>>
    

    【讨论】:

    • 详细说明:反斜杠是普通字符串中的转义字符,因此\b 变成了a backspace character。所以要么你需要使用\\b 要么使用原始字符串文字。
    • 通常在使用正则表达式时,最好使用原始字符串。
    • 啊 ic。如果我使用 r" 是否会混淆其他字符,例如 ^ 和 $?
    • @user3314418 不,它只会影响您需要使用的反斜杠的数量(提示:您不需要使用原始字符串那么多)
    • 我明白了。我尝试使用正则表达式 r'\b\[details\]\b' 删除文本中的 [details]。但是单词边界不起作用。它在没有\b 的情况下工作,因为我没有任何包含 [details] 作为子字符串的文本。即使我对我拥有的数据有一个解决方案,但我觉得它没有被普遍化。关于我的代码中发生了什么的任何建议。
    【解决方案2】:

    试试这个

    import re
    p = re.compile(ur'\bThe\b', re.IGNORECASE)
    test_str = u"Builders Club The Ohio State"
    subst = u""
    
    result = re.sub(p, subst, test_str)
    

    输出:

    Builders Club Ohio State
    

    这里是DEMO

    【讨论】:

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