簡體   English   中英

關於python Regex中重復模式的困惑

[英]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.

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