簡體   English   中英

將正則表達式匹配到整個字符串,而不只是字符串的一部分

[英]Match a regex to the whole string and not just a part of the string

我有一個正則表達式: r'((\\+91|0)?\\s?\\d{10})'

我試圖像匹配的數字+91 1234567890123456779001234567890

這些數字不應該匹配: 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) - +910
    • \\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.

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