簡體   English   中英

python regex模式以最小的方式捕獲數字

[英]python regex pattern grabs digits in a minimal way

我嘗試從類似“ at(17.08)”的字符串中獲取里程並鏈接整數值。 輸入數據的假十進制形式由數據管理員選擇。 首先,我對字符串“ 17.08”嘗試了以下模式:

"((\d+)\.(\d\d))"

這表現正確:

group(0) is "17.08"
group(1) is "17.08"
group(2) is "17"
group(3) is "08"

但是現在“ at(17.08)是一個”變體:我希望能夠使用這種模式將正確格式的位置替換為“十進制”表示法:

".*\(?((\d+)\.(\d\d))\)?.*"

當用re.match查詢時,我得到以下匹配組:

group(0) is "(17.08)", OK.
group(1) is "7.08", where is the 1 going ?
group(2) is "7", where is the 1 going ?
group(3) is "08", still OK.

我究竟做錯了什么 ? 為什么“重新”表現得如此? 我有一個想法,這必須與“貪婪” /“非貪婪”主題相關,但是如何?

原因是前綴的.*\\(?部分吸收了輸入中的1 ,因為左括號是可選的,而.*是貪婪的。我解決此問題的方法是改用以下正則表達式(請注意第一個空格* ):

".* \\(?((\\d+)\\.(\\d\\d))\\)?.*"

假設您在左方括號(如果有)或數字之前始終有一個空格。

暫無
暫無

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

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