簡體   English   中英

Python正則表達式在定界符之間查找特殊字符

[英]Python regex to find special characters between delimiters

給定一個字符串,我想打,只有相匹配的無效,特定字符,例如“分號”,即沒有括號或括號內發現了一個正則表達式。 我可以編寫與相反情況匹配的模式,但是如何反轉(例如^ )模式?

編輯 :我應該注意,我需要一個通用的解決方案,其中分號和定界符之間可以存在n個字符; 不僅零寬度匹配。

>>> invalid = '2#2;a,a [4,4;b/b]'
>>> valid = '(2#2;a,a) [4,4;b/b]'
>>> pattern = r'(\(.+?\;.+?\))|(\[.+?\;.+?\])'      # finds valid cases; want the opposite

# Result
>>>bool(re.findall(pattern, invalid))                
True                                              # overlooks the invalid subset '2;a'
>>> not re.findall(pattern, valid)
True

# Desired result
>>>bool(re.findall(pattern_inverse, invalid))
True
>>> bool(re.findall(pattern_inverse, valid))
False

使用交替運算符。 被俘; 必須在那些括號之外。

>>> import re
>>> invalid = '2;a [4;b]'
>>> valid = '(2;a) [4;b]'
>>> pattern = r'(?:\([^()]*;[^()]*\)|\[[^\[\]]*\;[^\[\]]*\])|(;)'
>>> re.findall(pattern, invalid)
[';', '']
>>> re.findall(pattern, valid)
['', '']
>>> any(re.findall(pattern, invalid))
True
>>> any(re.findall(pattern, valid))
False

要么

>>> pattern = r';(?![^()]*\)|[^\[\]]*\])'
>>> any(re.findall(pattern, invalid))
True
>>> any(re.findall(pattern, valid))
False
>>> re.findall(pattern, invalid)
[';']
>>> re.findall(pattern, valid)
[]
>>> 

您可以使用負數前瞻和后向。 尋找例子; 您可以執行以下操作:

;(?![a-z]\])

在后面添加一個lookbehind,您會得到如下所示:

(?<!\[[0-9]);(?![a-z]\])

后面的內容有一些限制-特別是不能使用“ *”或“ +”量詞。

如果您希望自己的正則表達式匹配整個無效部分,則可以使用類似這樣的方法。 然后,您可以根據需要使用捕獲組來提取分號。

(?<=^|\s)[^(\[]*;[^)\]]*(?=\s|$)

暫無
暫無

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

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