Python 如何使用后跟可选匹配模式的任何字符匹配?
我有这个输入,名称和cp_名称(,10) 我的要求是,Python 如何使用后跟可选匹配模式的任何字符匹配?,python,regex,Python,Regex,我有这个输入,名称和cp_名称(,10) 我的要求是, 开始不应该是一个空间 “name”应该由任何chracter(+)匹配,因为它可以是任何内容 “&cp_名称”(可选) “()”括号中可以包含任何内容(可选) 注意:所有这三个可以用一个或多个空格分隔 (?P<field>[^\s].+?)\s*(?P<col>[&][a-zA-Z_]+)?\s*(?P<pos>\(.*?\))? (?P[^\s].+?)\s*(?P[&][a-zA
- 开始不应该是一个空间
- “name”应该由任何chracter(+)匹配,因为它可以是任何内容
- “&cp_名称”(可选)
- “()”括号中可以包含任何内容(可选)
(?P<field>[^\s].+?)\s*(?P<col>[&][a-zA-Z_]+)?\s*(?P<pos>\(.*?\))?
(?P[^\s].+?)\s*(?P[&][a-zA-Z+)?\s*(?P\(.*))?
我在python中尝试的正则表达式
我希望有一场比赛有3个被抓获的小组
- 字段->名称
- col->&cp\u名称
- 位置->(,10)
- 字段->“不适用”
- 字段->“我”
- 列->“&cp_名称”
- 位置->'(,10)'
&
开头,也不以左括号和右括号开头
^(?P<field>(?![^\s&]*&)\S+(?: (?!\([^)]*\)|[^&\s]*&)\S+)*)\s*(?P<col>&[a-zA-Z_]+)?\s*(?P<pos>\(.*?\))?$
^(?P(?![^\s&]*&)\s+(?:(?!\([^)]*\)\124;[^&\ s]*&)\s+)\s*(?P&[a-zA-Z+)?\s*(?P\(*?)$
字符串的开头^
命名组字段(?P
断言右侧的内容不包含(?![^\s&]*&)\s+
,然后将非空白字符匹配1+倍&
不匹配空白字符或[^\s&]\s+
后跟匹配1+倍非空白字符&
非捕获组(?:
断言右边的不是(?!\([^)]*\)\S+
…(
,然后将非空白字符匹配1+倍)
关闭非捕获组并重复0多次)*
关闭组字段)
匹配可选\s*(?P&a-zA-Z+)?
组col
匹配可选\s*(?P\(.*))?
组pos
请注意,您可以省略
[&]
是周围的方括号。我想到了。但问题是字段值可能有空间。例如:print_name(name,10)@ArunKumar如果字段名不能有()&
,那么您可以尝试您也可以重复不匹配符号,并且以非贪婪的方式字段名可以有()
,但不能有&
,谢谢!这真的帮助我解决了应该如何解析'name(x)
,field='name'和pos='(x)或field='name(x)'pos='?