如果我有india
一词
匹配
"india!" "india!" "india." "india"
非比赛"indian" "indiana"
基本上,我想匹配字符串,但是不希望包含在另一个字符串中。
做完一些研究之后,我开始
exp = "(?<!\S)india(?!\S)"
num_matches = len(re.findall(exp))
但这与标点符号不匹配,我不确定在哪里添加它。
答案 0 :(得分:2)
假设目标是匹配字符串中的给定单词(例如"india"
),前提是该单词既不在字符串" .,?!;"
之前也不在其后,则可以使用以下正则表达式:
(?<![^ .,?!;])india(?![^ .,?!;\r\n])
Python的正则表达式引擎执行以下操作
(?<! # begin a negative lookbehind
[^ .,?!;] # match 1 char other than those in " .,?!;"
) # end the negative lookbehind
india # match string
(?! # begin a negative lookahead
[^ .,?!;\r\n] # match 1 char other than those in " .,?!;\r\n"
) # end the negative lookahead
请注意,如果\r
位于行尾,则负前行中的字符类包含\n
和india
。
答案 1 :(得分:1)
答案 2 :(得分:1)
您可以使用:
import re
s = "india."
s1 = "indiana"
print(re.search(r'\bindia[.!?]*\b', s))
print(re.search(r'\bindia[.!?]*\b', s1))
输出:
<re.Match object; span=(0, 5), match='india'>
None
答案 3 :(得分:1)
\"india(\W*?)\"
这将捕获数字和字母以外的任何内容
答案 4 :(得分:1)
尝试一下
^india[^a-zA-Z0-9]$
^
-正则表达式始于印度
[^a-zA-Z0-9]
-不是a-z,A-Z,0-9
$
-结束正则表达式
答案 5 :(得分:1)
如果您还想匹配标点符号,则可以使用negated character class,在其中可以匹配除单词字符或换行符以外的任何字符。
(?<!\S)india[^\w\r\n]*(?!\S)
(?<!\S)
在左侧断言一个惠特尼武器india
字面上匹配[^\w\r\n]
匹配除字符char或换行符之外的任何字符0+次(?!\S)
在右侧声明一个白色空间边界