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