簡體   English   中英

Python 帶有所有可選組的正則表達式

[英]Python Regex with all optional groups

我有當前的正則表達式模式:

(.*?)?(?:<)?([\w\.-]+@[\w\.-]+)(?:>)?(.*)?

我以name <email>格式輸入字符串,其中包含<> ,但有時會省略(我將它們設為非捕獲組的原因)。 有時我可能會在 email 之后有文本,例如name <email> fshasodi ,為此我添加了一個額外的組來捕獲它。

現在我的正則表達式的問題是,如果字符串中沒有 email,那么它與表達式不匹配。 如何使 email 也是可選的? 我知道這會使所有組都是可選的,有沒有更好的方法可以做到這一點?

您需要使用錨( ^$ )來確保匹配整個字符串(或行),然后您需要在匹配 email 和 rest 的模式周圍使用可選的非捕獲組。

請注意,您的非捕獲組是多余的, (?:>)? >? .

此外,您不需要轉義字符 class 內的點。

因此,您可以使用

^(.*?)(?:<?([\w.-]+@[\w.-]+)>?(.*))?$

請參閱正則表達式演示

詳情

  • ^ - 字符串的開頭
  • (.*?) - 捕獲組 1:除換行符之外的任何零個或多個字符,盡可能少
  • (?:<?([\w.-]+@[\w.-]+)>?(.*))? - 可選組匹配
    • <? - 一個可選的< char
    • ([\w.-]+@[\w.-]+) - 捕獲組 2:一個或多個單詞, . -字符、 @和一個或多個單詞, . -字符
    • >? - 一個可選的>字符
    • (.*) - 捕獲組 3:除換行符之外的任何零個或多個字符,盡可能多
  • $ - 字符串結束。

暫無
暫無

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

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