正则表达式匹配单词,后跟空格或标点符号

时间:2020-04-03 17:56:39

标签: python regex

如果我有india一词

匹配 "india!" "india!" "india." "india"

非比赛"indian" "indiana"

基本上,我想匹配字符串,但是不希望包含在另一个字符串中。

做完一些研究之后,我开始

exp = "(?<!\S)india(?!\S)" num_matches = len(re.findall(exp))

但这与标点符号不匹配,我不确定在哪里添加它。

6 个答案:

答案 0 :(得分:2)

假设目标是匹配字符串中的给定单词(例如"india"),前提是该单词既不在字符串" .,?!;"之前也不在其后,则可以使用以下正则表达式:

(?<![^ .,?!;])india(?![^ .,?!;\r\n])

Demo

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位于行尾,则负前行中的字符类包含\nindia

答案 1 :(得分:1)

尝试:

r'\bindia\W*\b'

请参见demo


忽略大小写:

re.search(r'\bindia\W*\b', my_string, re.IGNORECASE).group(0)

答案 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)在右侧声明一个白色空间边界

Regex demo