2017-08-23 107 views
0

我想匹配一個字符串,它包含字母數字和一些特殊字符,但不包含換行符。但是,每當我的字符串有一個換行符時,它也匹配換行符。我檢查了一些標誌的文件,但沒有一個看起來相關。Python正則表達式換行匹配

以下是在Python代碼示例3.6.2 REPL

>>> import re 
>>> s = "do_not_match\n" 
>>> p = re.compile(r"^[a-zA-Z\+\-\/\*\%\_\>\<=]*$") 
>>> p.match(s) 
<_sre.SRE_Match object; span=(0, 12), match='do_not_match'> 

預期的結果是,它不應該匹配正如我在端部處具有換行符。

https://regex101.com/r/qyRw5s/1

我什麼我缺少這裏有點糊塗了。

+0

用'\ Z'替換'$' –

+0

它與Python的版本無關。 –

+0

謝謝Wiktor。背景可能是相關的,但從問題的角度來看,這不是一個明確的重複。所以,這就是爲什麼,我找不到我正在尋找的答案。另外,我儘可能提供儘可能多的信息。我很感激幫助。 –

回答

3

問題是$在換行符(如果有)之前的字符串的末尾處匹配。

如果您不想在最後匹配換行符,請在您的正則表達式中使用\Z而不是$

re模塊的文檔:

「$」
只匹配在字符串末尾的換行符之前的字符串或結束,


只匹配在字符串的結尾。

+0

謝謝。我閱讀了文檔,但並不清楚。我接受你的答案。我仍然不確定爲什麼regex101忽略了這個事實。 –

+0

我想,你需要使用實際的輸入鍵而不是'「\ n」'。 –

+0

這麼真實!謝謝你讓我明白。 :| –