簡體   English   中英

Python 正則表達式與可選組

[英]Python regexp with optional groups

使用 Python 我需要解析以下字符串,可以用四種不同的方式編寫:

:param MyParam: My description [MyValue] {MyGroup}  
:param MyParam: My description [MyValue]  
:param MyParam: My description {MyGroup}  
:param MyParam: My description  

期望是提取MyParam、My description、MyValue和MyGroup

我嘗試了以下模式:

^\:param(?P<param>.*)\:(?P<desc>.*)\s*(\[(?P<value>.*)\])?\s*(\{(?P<group>.*)\})?$

但在所有情況下,它都太貪婪了。

使用以下一個:

^\:param(?P<param>.*)\:(?P<desc>.*) (\[(?P<value>.*)\])? (\{(?P<group>.*)\})?$

僅當根據模式預期有空格時,我才會得到有效的結果。
知道如何解決這個問題嗎?

您可以使用此正則表達式來解析您的問題中提到的所有可能的組合:

^:param\s+(?P<param>[^:]+):\s*(?P<desc>.*?)\s*(?:\[(?P<value>[^]]*)\])?\s*(?:\{(?P<group>[^}]*)\})?$

正則表達式演示

雷克斯詳細信息:

  • ^ : 開始
  • :匹配冒號
  • param\s+ :匹配文本param ,后跟 1+ 個空格字符
  • (?P<param>[^:]+) :匹配命名組param中的 1+ 個非冒號字符
  • :\s* : 匹配 a :后跟 0+ 個空格字符
  • (?P<desc>.*?) :匹配命名組desc中任何字符的 0+
  • \s* : 匹配 0+ 個空白字符
  • (?:\[(?P<value>[^]]*)\])? :可選地匹配[...]並在命名組value中捕獲內部文本
  • \s* : 數學 0+ 空白字符
  • (?:\{(?P<group>[^}]*)\})? :可選地匹配{...}並在命名組group中捕獲內部文本
  • $ : 結束

暫無
暫無

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

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