Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用后跟可选匹配模式的任何字符匹配?_Python_Regex - Fatal编程技术网

Python 如何使用后跟可选匹配模式的任何字符匹配?

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

我有这个输入,名称和cp_名称(,10)

我的要求是,

  • 开始不应该是一个空间
  • “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)
我得到的是2根火柴

第一场比赛:

  • 字段->“不适用”
第二场比赛:

  • 字段->“我”
  • 列->“&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='?