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 =“嗨你好”
如何使用正则表达式匹配?
答案 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)
(?<=^)|(?<=\s)
是一个值得关注,以确保我们在单词(?=\s|$)
是一个先行,以确保我们的单词旁边有行尾或空格