Python 使用Regex查找重复{}的组()
我试图分析以下文本块以收集文化+亚文化(最好分别在第1组和第2组中): 众神之家。极乐世界,阿瓦隆,人间天堂。--凯尔特人(将军):麦克库洛赫凯尔特人14;爱尔兰:同上。37楼,114楼,十字架;威尔士:同上。193; Icel.:MacCulloch Eddic 312F。;印度教:彭泽一世125 n。1.犹太人:纽曼。--夏威夷:贝克汉姆神话67;所以是印地安人(Apapocuv\xe1瓜拉尼):M\xe9traux RMLP XXXIII 122;非洲(方):颤音130 到目前为止,我最好的尝试是使用以下正则表达式: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 到目前为止,我最好
(\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”“\(.*?)\”
(连同第二部分)获得了额外的子部落,因此:非洲(方)向组中添加重复运算符(如
{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,你能告诉我你在使用什么吗?谢谢