[英]Python regular expression matching using $
我正在使用Python 2.7.0並在解釋器中執行以下操作:
>>> re.search (r"//\s*.*?$", "//\n\na12345678", flags=re.MULTILINE|re.DOTALL).group()
'//\n\na12345678'
這不是我的預期。 我雖然$會在結束前匹配,但它包含了兩個結束字符和文本之后?
令人驚訝的是,這有效:
>>> re.search (r"//\s*.*?$", "//1\n\na12345678", flags=re.MULTILINE|re.DOTALL).group()
'//1'
我在這里對python正則表達式有什么誤解?
更多信息:
>>> re.search(r"//\s*.*", "//\n test").group()
'//\n test'
>>> re.search(r"//\s*.*", "//1\n test").group()
'//1'
最后一段代碼沒有MUTLILINE和DOTALL? 我在這里誤解了什么? 。*不應該與換行符匹配,絕對不能過去吧,對吧?
\\s
可以匹配換行符,當您使用re.DOTALL
標志時.
也可以匹配換行符。
在第一種情況下你的\\s*
是貪婪的,所以因為你的字符串中//
之后的第一個字符是換行符,它們將被\\s*
匹配,然后是.*?
將匹配最后一行,以便$
可以在字符串的最后匹配。
在第二種情況下, \\s*
無法匹配,因為//
后面的1
和.*?
只會在第一個換行符之前匹配,因為它是懶惰的。
如果要匹配除換行符之外的所有空格,可以使用[ \\t]
代替\\s
。 實際上,對於你的例子來說,如果你只是在啟用了re.MULTILINE
標志的情況下使用正則表達式//.*?$
,那么你將獲得預期的行為( re.DOTALL
也可以包括在內,它不會對此產生影響)案件)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.