如何匹配字符串中的确切单词?

时间:2016-07-13 16:52:17

标签: python regex python-2.7

op = ['TRAIL_RATE_ID 8 TRAIL_RATE_NAME VC-4 TRAIL_ORDER High Order ',    'TRAIL_RATE_ID 9 TRAIL_RATE_NAME VC4-4 TRAIL_ORDER High Order ' , 'TRAIL_RATE_ID 10 TRAIL_RATE_NAME VC-8 TRAIL_ORDER High Order ']
word = "8"
for op1 in op:
    pp=re.search('(\\b'+word +'\\b)', op1, flags=re.IGNORECASE|re.DOTALL)
    print bool(pp)

匹配2次出现的8.

我希望它只匹配第一次出现。这个词可以     word =“8”     word =“$#hhd”     word =“嗨你好”

如何使用正则表达式匹配?

2 个答案:

答案 0 :(得分:6)

您可以要求在单词的两边不应有非空白符号:

r'(?<!\S){0}(?!\S)'.format(re.escape(word))

请参阅regex demo

我添加了re.escape(word),以防您的关键字包含应按字面处理的特殊正则表达式元字符。

请参阅Python demo

import re
word = "8"
pat = r'(?<!\S){0}(?!\S)'.format(re.escape(word))
print re.search(pat,"nnn 8", flags=re.IGNORECASE)

答案 1 :(得分:4)

词边界不会有帮助,因为-不被视为单词字符。

您可以使用外观:

p = re.compile(r'(?:(?<=^)|(?<=\s))' + word + r'(?=\s|$)', flags=re.IGNORECASE|re.M)
re.search(p, op1)

Code Demo

  • (?<=^)|(?<=\s)是一个值得关注,以确保我们在单词
  • 之前有行开头或空格
  • (?=\s|$)是一个先行,以确保我们的单词旁边有行尾或空格
相关问题