簡體   English   中英

Regex python - 僅當換行符后跟數字或特殊字符和空格時才匹配換行符

[英]Regex python - Match newline only if it is followed by number or special character and space

我一直試圖在 Python 中找出這個正則表達式,但它沒有產生預期的結果。

我有一個我加載的文本文件,格式為:

"18 75 19\n!dont split here\n! but split here\n* and split here"

我想得到以下輸出:

['18 75 19\n!dont split here',
 '! but split here',
 '* and split here']

我試圖通過 1) 一個新行后跟一個數字,或 2) 一個新行后跟一個特殊字符來分割我的字符串,僅當它后跟一個空格時(例如'!但在這里分割',但不是'!不要在這里分裂')。

這是我到目前為止所擁有的:

re.split(u'\n(?=[0-9]|([`\-=~!@#$%^&*()_+\[\]{};\'\\:"|<,./<>?])(?= ))', str)

這已經很接近了,但還沒有。 這是它產生的輸出:

['18 75 19\n!dont split here', '!', '! but split here', '*', '* and split here']

它單獨錯誤地匹配了特殊字符:'!' 和 '*' 有自己的元素。 正則表達式中有兩個前瞻運算符。

如果您能幫助確定我可以使用此正則表達式更改的內容,使其與單個特殊字符不匹配,並且只匹配特殊字符后跟整行,我將不勝感激。

我也對替代品持開放態度。 如果有一種不涉及兩次前瞻的更好方法,我也有興趣了解解決此問題的其他方法。

謝謝!

您的正則表達式實際上正在工作,問題在於您在[`\\-=~!@#$%^&*()_+\\[\\]{};\\'\\\\:"|<,./<>?] . 來自手冊

如果在模式中使用捕獲括號,則模式中所有組的文本也作為結果列表的一部分返回

如果刪除該字符類周圍的() ,您將獲得預期的結果。

請注意,在該交替中您不需要(?= ) ,因為它已經是前瞻的一部分,您可以使用 (空間)。 此外,您可能會發現將符號編寫為否定字符類更容易,即

re.split(u'\n(?=[0-9]|[^A-Za-z0-9] )', str)

暫無
暫無

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

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