簡體   English   中英

正則表達式具有不同的模式

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

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