簡體   English   中英

如何搜索/提取字符串中的模式?

[英]How to search/extract patterns in a string?

我有一個要在郵件中搜索的模式。 模式是:

1. "aaa-b3-c"
2. "a3-b6-c"
3. "aaaa-bb-c"

我知道如何搜索其中一種模式,但是如何搜索所有3種模式?

另外,您如何識別和提取以下格式的日期:5/21或5/21/2019。

found = re.findall(r'.{3}-.{2}-.{1}', message)

第一部分可以是量詞{2,4}而不是3。點與換行符匹配,除了換行符, [a-zA-Z0-9]將匹配大寫或小寫字符az或數字:

\b[a-zA-Z0-9]{2,4}-[a-zA-Z0-9]{2}-[a-zA-Z0-9]\b

演示版

如果字符不應該是較長單詞的一部分,則可以在單詞兩側加上\\b或錨定^$

對於第二種模式,您還可以使用\\d和量詞來匹配數字,並使用可選的模式來匹配帶有/和4位數字的部分:

\d{1,2}/\d{2}(?:/\d{4})?

正則表達式演示

請注意,該格式不會驗證日期本身。 也許此頁面可以幫助您創建/自定義更具體的日期格式。

嘗試這個 :

found = re.findall(r'a{2,4}-b{2}-c', message)

你可以用

a{2,4}-bb-c

作為一種模式。


現在您需要檢查匹配的真實性:

if (match := re.search(pattern, string)) is not None:
    # do sth. here

Python 3.8您可以像下面一樣使用walrus運算符

 if (match := re.search(pattern, string)) is not None: # do sth. here 

嘗試這個:

re.findall(r'a.*-b.*-c',message)

在這里,我們可能只想編寫三個表達式,然后從左向右滑動我們的輸入以確保安全並使用邏輯或將它們連接起來,如果我們有更多的模式,我們可以簡單地添加到其中,類似於:

([a-z]+-[a-z]+[0-9]+-[a-z]+)
([a-z]+[0-9]+-[a-z]+[0-9]+-[a-z])
([a-z]+-[a-z]+-[a-z])

這將增加:

([a-z]+-[a-z]+[0-9]+-[a-z]+)|([a-z]+[0-9]+-[a-z]+[0-9]+-[a-z])|([a-z]+-[a-z]+-[a-z])

然后,我們可能希望將其與開始和結束字符綁定:

^([a-z]+-[a-z]+[0-9]+-[a-z]+)$|^([a-z]+[0-9]+-[a-z]+[0-9]+-[a-z])$|^([a-z]+-[a-z]+-[a-z])$

要么

^(([a-z]+-[a-z]+[0-9]+-[a-z]+)|([a-z]+[0-9]+-[a-z]+[0-9]+-[a-z])|([a-z]+-[a-z]+-[a-z]))$

在此處輸入圖片說明

正則表達式

如果不需要此表達式,則可以在regex101.com中對其進行修改或更改。

RegEx電路

jex.im可視化正則表達式:

在此處輸入圖片說明

暫無
暫無

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

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