[英]Regex with different pattern
我有以下字符串
s1 = 'XXX-2 I LOVE : XXX XXX'
s2 = 'FOOD : XXX'
s3 = 'XXX-FOOD : XXX
我想要以下
s1 = '2 I LOVE'
s2 = 'FOOD'
s3 = 'FOOD'
s2
僅具有1個定界符:
而s1 & s3
具有2- - & :
我想將所有內容都保留在兩個定界符- & :
之間,所以我使用以下\\-(.*?)\\:
但是我沒有得到s2
如果我使用以下\\w+\\-?(.*?)\\:
我會得到所有-
我在regex上很糟糕,如果有人可以幫助我解決這個問題並提供理解regex的鏈接,我將不勝感激。
以下正則表達式適用於您的示例
(?:[^-]+-)?([^:]+):.*
我們正在使用strip
刪除尾隨空格。
s1 = re.sub(r'[^a-zA-Z0-9\s]+|X','',s1).strip()
s2 = re.sub(r'[^a-zA-Z0-9\s]+|X','',s2).strip()
s3 = re.sub(r'[^a-zA-Z0-9\s]+|X','',s3).strip()
2 I LOVE
FOOD
FOOD
您需要的正則表達式為: (?:\\w+-)?(.*?):
(?:\\w+-)?
表示要檢查類似單詞的字符\\w
的初始序列,然后是連字符。 既然我們在括號中有這個符號,它后面的問號表示整個部分都是可選的-即,要么在行的開頭有\\w+
和-
,要么都不存在。 ?:
部分只是告訴Python您在這里使用parantheses ()
只是為了進行分組,而不是因為您希望捕獲和存儲匹配的部分。
(.*?)
-這與我們實際需要的部分匹配,並將其存儲在捕獲組編號1中。因此,如果您有m = re.match(r"(?:\\w+-)?(.*?):", 'XXX-2 I LOVE : XXX XXX')
,則m.group(1)
將包含2 I LOVE
。
(請注意,一般來說, -
和:
都不需要在正則表達式中使用反斜杠轉義( -
只需在[]
字符類內引用),因此您可以寫出它們而不必轉義。)
您可能會發現RegExr之類的工具對於探索和理解正則表達式很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.