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