[英]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.