Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 使用Regex查找重复{}的组()_Python_Regex - Fatal编程技术网

Python 使用Regex查找重复{}的组()

Python 使用Regex查找重复{}的组(),python,regex,Python,Regex,我试图分析以下文本块以收集文化+亚文化(最好分别在第1组和第2组中): 众神之家。极乐世界,阿瓦隆,人间天堂。--凯尔特人(将军):麦克库洛赫凯尔特人14;爱尔兰:同上。37楼,114楼,十字架;威尔士:同上。193; Icel.:MacCulloch Eddic 312F。;印度教:彭泽一世125 n。1.犹太人:纽曼。--夏威夷:贝克汉姆神话67;所以是印地安人(Apapocuv\xe1瓜拉尼):M\xe9traux RMLP XXXIII 122;非洲(方):颤音130 到目前为止,我最好

我试图分析以下文本块以收集文化+亚文化(最好分别在第1组和第2组中):

众神之家。极乐世界,阿瓦隆,人间天堂。--凯尔特人(将军):麦克库洛赫凯尔特人14;爱尔兰:同上。37楼,114楼,十字架;威尔士:同上。193; Icel.:MacCulloch Eddic 312F。;印度教:彭泽一世125 n。1.犹太人:纽曼。--夏威夷:贝克汉姆神话67;所以是印地安人(Apapocuv\xe1瓜拉尼):M\xe9traux RMLP XXXIII 122;非洲(方):颤音130

到目前为止,我最好的尝试是使用以下正则表达式:

(\w+)\.?\:|(\w+\.?\s?){0,3}\((.*?)\)\:
其结果如下:

[(u'', u'Celtic ', u'general'), (u'Irish', u'', u''), (u'Welsh', u'', u''), (u'Icel', u'', u''), (u'Hindu', u'', u''), (u'Jewish', u'', u''), (u'Hawaii', u'', u''), (u'', u'Indian ', u'Apapocuv\xe1-Guarani'), (u'', u'Africa ', u'Fang')]  
问题在于,它在“Apapocuv\xe1 Guarani”之前只有“Indian”一词,而不是“Indian”。是印度人

以下是我对整个系统的逻辑/要求的分解:

  • 第一组“
    ”(\w+)\?\:”
    表示以a结尾的任何单词:(爱尔兰语、犹太人、夏威夷语、印度教)
  • 第二组
    “(\w+\.?\s?{0,3}”
    专门用于获取“So.Am.Indian”这是我遇到问题的部分。我有印度人,但不是。是印度的我还需要一些变体,比如“So.Am.Indian,S.A.Indian,So.A.Indian,S.Am.Indian”
  • 第三组
    “\(.*?)\”
    (连同第二部分)获得了额外的子部落,因此:非洲(方)
  • 我希望将这些工作分为两组,但稍后我可以在代码中处理三组。如果有人有任何想法,我将不胜感激。

    示例(javascript)

    输出


    向组中添加重复运算符(如
    {0,3}
    )的问题在于,每次匹配该组时,该组的反向引用都将被覆盖。如果要捕获整个重复匹配,需要使用嵌套组:

    (\w+).?\:|((\w+.?\s?){0,3})((.*?))\:
    
    (\w+).?\:|((?:\w+.?\s?){0,3})((.*?))\:
    
    这将生成一个额外的反向引用(在本例中为
    \2
    ),您可以忽略该引用,但如果这让您感到困扰,许多正则表达式引擎还为非引用组提供了
    (?:)
    语法:

    (\w+).?\:|((\w+.?\s?){0,3})((.*?))\:
    
    (\w+).?\:|((?:\w+.?\s?){0,3})((.*?))\:
    

    哇,谢谢你!这非常有效,简化了我的两个小组,谢谢。我唯一的问题是(也许我没有尽可能清楚地说明)它不允许捕捉“So.Am.Indian”,而只是“Indian”。我需要能够理解前面是否有多达三个缩写词,例如“So.Am.Indian,S.A.Indian,So.A.Indian,S.Am.Indian”,如果您知道,请告诉我,并再次感谢。)Hrrmm。。。我尝试了这两种方法,但效果都不好。我正在使用python和re.findall,你能告诉我你在使用什么吗?谢谢