簡體   English   中英

在Python中刪除與正則表達式模式不匹配的所有內容

[英]Remove everything that doesn't match regex patterns in Python

我有一個正則表達式模式,可以在整個日期列中標識日期,但是某些日期包含在字符串中,而某些日期本身只是純日期。 我的正則表達式模式可以完美地找到每個日期,但是現在我希望能夠說出“刪除所有不適合日期模式的內容”,這將擺脫某些日期之前或之后的文本。

我想要的東西示例:

Mexico [12/20/1985]如果我可以刪除與模式不匹配的內容,那么括號和墨西哥將消失

說我的正則表達式模式是(我還有兩個可以匹配更具體的日期格式,但不包括它們,因為這是重點:

pattern = (r"(19|20)\\d\\d")

我正在使用has_date = data.str.contains(pattern) ,它可以完美地找到我想要的東西。 但是,既然我已經確定了具有所需日期的觀測值,那么我就需要剝離/刪除/替換所有不屬於該模式的內容。

我制作了一份與正則表達式模式不匹配以及哪些不匹配的文件,並檢查以確保我的正則表達式模式包含了所有內容,因此我在這方面很好。

有人對如何替換不是我的圖案的方法有任何建議嗎? 歡迎任何想法。 謝謝

為了解決您的確切問題,即替換所有與模式不匹配的內容,您可以使用

df['Data'] = df['Data'].str.replace(r"(?s)((?:19|20)\d\d)?.", r"\1")

參見regex演示

在這里, (?s)將成為. 匹配任何字符, ((?:19|20)\\d\\d)? 是一個可選的捕獲組#1,它匹配1920 ,然后匹配任意2位數字1或0次,然后將任何char與匹配. 圖案。 如果第1組匹配,由於\\1反向引用,它將被放回到結果中。

但是,似乎您只想從數據中提取年份,如果沒有年份,則只獲取一個空字符串,因此請使用

df['Data'] = df['Data'].str.extract(r'\b((?:19|20)\d{2})\b', expand=False).fillna('')

\\b((?:19|20)\\d{2})\\b將匹配1920 ,然后匹配整個單詞中的任何兩位數字(由於\\b單詞邊界)。

暫無
暫無

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

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