簡體   English   中英

匹配字符串的一部分,直到它到達行的末尾(python正則表達式)

[英]match part of a string until it reaches the end of the line (python regex)

如果我有一個包含多行的大字符串,並且我想將一部分行匹配到該行的末尾,那么最好的方法是什么?

所以,例如我有這樣的東西,我希望它在到達新行字符時停止匹配。

r"(?P<name>[A-Za-z\s.]+)"

我在之前的回答中看到了這個:

$ - 表示匹配字符串的結尾,或者如果啟用了多行,則表示行的結尾。

我的問題是,作為答案的作者,你如何“啟用多線”?

簡單地使用

r"(?P<name>[A-Za-z\t .]+)"

這將匹配ASCII字母,空格,制表符或句點。 它會停止,這不是包括在該組中的第一個字符-和換行符沒有(而它們包含在\\s ,並且由於它的不相關的多模式是否開啟或關閉)。

您可以通過將re.MULTILINE作為第二個參數傳遞給re.compile()來啟用多行匹配。 但是,需要注意的是:因為+量詞是貪婪的,所以這個正則表達式將匹配盡可能長的字符串,所以如果下一行由字母和空格組成,則正則表達式可能匹配多個line( $匹配任何字符串的結尾)。

有三種解決方案:

  1. 更改你的正則表達式,以便不是匹配包括換行符( \\s )在內的任何空格,而是重復的字符集與該換行符不匹配。
  2. 將量詞更改為+? 中,非貪婪(“最小”)的版本+ ,這樣它會盡可能短的字符串作為可能的匹配,並且因此停止在第一換行符。
  3. 更改代碼,首先將文本拆分為每行的單獨字符串(使用text.split('\\n')

暫無
暫無

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

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