簡體   English   中英

正則表達式匹配后跟空格或標點符號的單詞

[英]Regex to match words followed by whitespace or punctuation

如果我有india這個詞

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

不匹配"indian" "indiana"

基本上,我想匹配字符串,但不是當它包含在另一個字符串中時。

在做了一些研究之后,我開始

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

但這與標點符號不匹配,我不確定在哪里添加。

假設目標是匹配字符串中的給定單詞(例如"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

請注意,如果india位於行尾,則負前瞻中的字符 class 包含\r\n

嘗試:

r'\bindia\W*\b'

查看演示


忽略大小寫:

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

你可以使用:

import re

s = "india."
s1 = "indiana"
print(re.search(r'\bindia[.!?]*\b', s))
print(re.search(r'\bindia[.!?]*\b', s1))

output:

<re.Match object; span=(0, 5), match='india'>
None
\"india(\W*?)\" 

這將捕獲除數字和字母之外的任何內容

試試這個^india[^a-zA-Z0-9]$

^ - 正則表達式從印度開始

[^a-zA-Z0-9] - 不是 az, AZ, 0-9

$ - 結束正則表達式

如果您還想匹配標點符號,您可以使用否定字符 class來匹配除單詞字符或換行符之外的任何字符。

(?<!\S)india[^\w\r\n]*(?!\S)
  • (?<!\S)在左邊斷言一個空白邊界
  • india從字面上匹配
  • [^\w\r\n]匹配除單詞 char 或換行符以外的任何字符 0+ 次
  • (?!\S)斷言右邊的空白邊界

正則表達式演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM