我有一個字符串:Python的正則表達式被動組和回顧後
# print thestring
abcd\t$500\n
我想提取的500美元價值不美元符號。
這裏是我的代碼:
# trying positive lookbehind
m = re.search('(<=\$)\d+$',thestring)
# trying passive groups
m = re.search('(?:\$)\d+$',thestring)
什麼我錯在這裏做什麼?
我有一個字符串:Python的正則表達式被動組和回顧後
# print thestring
abcd\t$500\n
我想提取的500美元價值不美元符號。
這裏是我的代碼:
# trying positive lookbehind
m = re.search('(<=\$)\d+$',thestring)
# trying passive groups
m = re.search('(?:\$)\d+$',thestring)
什麼我錯在這裏做什麼?
非捕獲組不會從匹配的子字符串中刪除結果,所以這就是爲什麼第二個解決方案不起作用。第一個解決方案應該可以工作,但是你似乎錯誤地使用了正面lookbehind的語法。它應該是:
(?<=\$)\d+$
首先,您應該逃避你的反斜線或使用原始字符串:
'(<=\\$)\\d+$'
或
r'(<=\$)\d+$'
下,爲什麼要用回顧後或被動的羣體?你想捕捉這個數字,對吧?如何:
m = re.search('\\$(\\d+)',thestring)
然後使用m.group(1)
檢索您的號碼。
爲什麼要有兩個反斜槓?它似乎與一個罰款。對不起,我對正則表達式很陌生。 – Abdulla 2012-03-22 20:56:31
是的,因爲你很幸運,'\ $'和'\ d'都不是有效的轉義序列。但是如果你輸入了,就說'\ n',你會得到一個換行符,而不是斜槓和'n'。 - 在你的交互式python shell中,評估你的一個非轉義字符串。口譯員會以逃脫的方式返回。 – 2012-03-22 20:58:24
'\ n'實際上並不是一個問題,因爲該轉義序列轉換爲Python換行符就好了。 '\ b'是一個更好的例子 - 作爲正則表達式,它意味着「字邊界」,在一個字符串中,它的意思是「退格」。 – 2012-03-22 21:01:53
出於好奇,非捕獲組的目的是什麼? – Abdulla 2012-03-22 20:55:14
@Abdulla一個非捕獲組,將內容分組在一起,但不存儲結果。它比捕獲組更快。僅當您需要重用此組的內容時才使用捕獲組。 – stema 2012-03-22 21:06:15
如果您需要以需要分組的方式修改正則表達式,但不想影響現有組的編號,它們也很有用。 – VeeArr 2012-03-23 18:52:50