[英]Confusion about repeating pattern in python Regex
我對在Python正則表達式中重復模式感到困惑。 我從文檔中了解到,“ *”表示重復零至N次。 假設我有一個字符串abc123def
。 我想找到包含數字字符的子字符串的位置,因此我使用以下代碼:
p = re.compile(r'[\d]*')
p.search('abc123def').span()
然后輸出(0,0)
如果我將正則表達式更改為[\\d]+
,則輸出(3,6)
。
為什么正則表達式r'[\\d]*'
不起作用? 謝謝。
確實有效。 [\\d]*
(順便說一句,括號是不必要的- \\d*
作用完全相同)匹配任何數字序列, 包括0位數字,即。 空字符串 。 空字符串將在任何地方匹配,尤其是在字符串的開頭。 如果您想要一個非空的數字序列,請像以前一樣使用\\d+
。
它確實起作用,它在字符串的開頭找到了一個零長度的字符串。
查看正在發生的另一種方法是使用findall
:
>>> re.findall(r'\d*', 'abc123def')
['', '', '', '123', '', '', '', '']
VS
>>> re.findall(r'\d+', 'abc123def')
['123']
或視覺上使用regex101
*
表示第一個機會為“零或更多”。 字符串開頭的數字為零。 火柴! 並且匹配項是字符串中的每個字符。
如果要匹配子字符串,請使用+
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.