[英]Match a regex to the whole string and not just a part of the string
我有一個正則表達式: r'((\\+91|0)?\\s?\\d{10})'
我試圖像匹配的數字+91 1234567890
, 1234567790
, 01234567890
。
這些數字不應該匹配: 1234568901112
因為它不是以+91或0開頭,或者不是只有10個數字:
當我嘗試使用re.findall()
:
re.findall(r'((\+91|0)?\s?\d{10})', '+91 1234567890, 1234567790, 01234567890, 1234568901112')
[('+91 1234567890', '+91'),
(' 1234567790', ''),
(' 0123456789', ''),
(' 1234568901', '')]
您會注意到,在第三和第四索引中,輸出不是我想要的。 我在第三個索引處的預期輸出是01234568890,因為它以0開頭,后跟10個字符。 但是它只顯示前10個字符。 我也不想在第四個索引中輸出,因為它的數量不完全匹配。 因此,要么匹配完整的單詞/字符串,要么無效。
我還可以使用其他正則表達式嗎? 還是功能? 我在這里做錯了什么?
預期的輸出是:
[('+91 1234567890','1234567790', '01234567890']
請讓我知道是否需要更多說明。
您可以使用
r'(?<!\w)(?:(?:\+91|0)\s?)?\d{10}\b'
參見regex演示 。
關鍵是要將這些模式作為整個單詞進行匹配,問題在於第一部分是可選的,而可選的替代單詞中的一個以非單詞char開頭,因此單個\\b
單詞邊界在這里將不起作用。
細節
(?<!\\w)
-當前位置的左邊不應有任何字符char (?:(?:\\+91|0)\\s?)?
-的可選事件
(?:\\+91|0)
- +91
或0
\\s?
-可選的空格 \\d{10}\\b
整個單詞十位數匹配,兩邊都不允許有字符字符 Python演示 :
import re
s = '+91 1234567890, 1234567790, 012345678900, 1234568901112, 01234567890'
print(re.findall(r'(?<!\w)(?:(?:\+91|0)\s?)?\d{10}\b', s))
# => ['+91 1234567890', '1234567790', '01234567890']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.