[英]Regex to match string which has words followed by whitespace then digits dot or hyphen and words followed by space and then (some info)
[英]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
。
你可以使用:
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.