正则表达式匹配非贪婪与可选结束
Regex match non-greedy with optional end
TYPE1: Name Potential (parenthesis) (POSITION1)
TYPE2: Name (POSITION2)
TYPE3: Name with no Position
我正在尝试提取 3 个东西。 TYPE
、NAME
、POSITION
。该位置是可选的。名称可以有括号。
我尝试了很多 REGEX 但无法弄清楚如何做到非贪婪但仍然包含名称的括号。
这些应该是我的最后一组
- TYPE1,名称潜力(括号),POSITION1
- 类型 2,姓名,位置 2
- 类型 3,名称
第一个不匹配:
(?<TYPE>.*?):\s*(?<NAME>[^(]*)\s*(?:\((?<POSITION>.*?)\))?
这个太贪心了,我不摘仓了:
(?<TYPE>.*?):\s*(?<NAME>.*)\s*(?:\((?<POSITION>.*?)\))?
您可以将此正则表达式与最后一组一起用作可选匹配项:
^(?<TYPE>[^:]+):\h*(?<NAME>.+?)(?:\h+\((?<POSITION>[^)]+)\))?$
如果您的正则表达式风格不支持 \h
(水平空格),请改用 [ \t]
。
TYPE1: Name Potential (parenthesis) (POSITION1)
TYPE2: Name (POSITION2)
TYPE3: Name with no Position
我正在尝试提取 3 个东西。 TYPE
、NAME
、POSITION
。该位置是可选的。名称可以有括号。
我尝试了很多 REGEX 但无法弄清楚如何做到非贪婪但仍然包含名称的括号。
这些应该是我的最后一组
- TYPE1,名称潜力(括号),POSITION1
- 类型 2,姓名,位置 2
- 类型 3,名称
第一个不匹配:
(?<TYPE>.*?):\s*(?<NAME>[^(]*)\s*(?:\((?<POSITION>.*?)\))?
这个太贪心了,我不摘仓了:
(?<TYPE>.*?):\s*(?<NAME>.*)\s*(?:\((?<POSITION>.*?)\))?
您可以将此正则表达式与最后一组一起用作可选匹配项:
^(?<TYPE>[^:]+):\h*(?<NAME>.+?)(?:\h+\((?<POSITION>[^)]+)\))?$
如果您的正则表达式风格不支持 \h
(水平空格),请改用 [ \t]
。