簡體   English   中英

Python正則表達式:問號(?)在字符串中間不匹配

[英]Python Regex: Question mark (?) doesn't match in middle of string

我在使用Python玩耍時遇到了這個問題:當我創建一個隨機字符串時,假設“ test 1981”,以下Python調用返回一個空字符串。

>>> re.search('\d?', "test 1981").group()
''

我想知道為什么會這樣。 我正在閱讀其他一些文章,看來這與貪婪和非貪婪的運算符有關。 是那個嗎? 檢查第一個值是否為數字,如果不是,則采用更簡單,更快捷的路徑,什么也不輸出? 任何澄清都會有所幫助。 謝謝!

您的模式匹配數字或空字符串。 它從第一個字符開始並嘗試匹配一個數字,接下來要做的是嘗試與替代字符匹配,這意味着空字符串voilà在第一個字符之前找到了一個匹配項。

我認為您希望它繼續前進並嘗試與下一個字符進行匹配,但這並沒有完成,首先它會嘗試與量詞在第一個位置上所允許的匹配。 那是0或一位數字。

可選量詞的使用僅與必需部分結合使用才有意義 ,例如,您想要一個數字后跟一個可選的數字:

>>> re.search('\d\d?', "test 1981").group()
'19'

否則,您的模式將始終為真。

正則表達式

\d?

只是意味着它可以選擇( ? )匹配一位數字( \\d )。

如果使用這樣的方法,它將按預期工作(在字符串中的任意位置匹配一位數字):

\d

re.search('\\d?', "test 1981").group()貪婪地匹配它可以找到的模式的第一個匹配項(0或1位數字)。 在這種情況下,該數字為零。 請注意, re.search('\\d?', "1981 test").group()實際上與字符串開頭的字符串'1'相匹配。 您可能在這里尋找的是re.search('\\d+', "test 1981").group() ,無論它在哪里,它都能找到整個字符串1981。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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