我试图分析以下文本块,以收集文化+次文化(最好分别在第1组和第2组中):
Home of the gods. Elysium, Avalon, earthly paradise.--Celtic (general): MacCulloch Celtic 14; Irish: ibid. 37f., 114ff., Cross; Welsh: ibid. 193; Icel.: MacCulloch Eddic 312ff.; Hindu: Penzer I 125 n. 1.; Jewish: Neuman.--Hawaii: Beckwith Myth 67; So. Am. Indian (Apapocuv\xe1-Guarani): M\xe9traux RMLP XXXIII 122; Africa (Fang): Trilles 130.
到目前为止,我最好的尝试是使用以下Regex:
(\w+)\.?\:|(\w+\.?\s?){0,3}\((.*?)\)\:
结果如下:
^{pr2}$它的问题是,它只能在“Apapocuv\xe1 Guarani”之前得到“Indian”,而不是这样。是。印第安人。在
以下是我对整个系统的逻辑/要求的分解:
'(\w+)\.?\:'
表示以a结尾的任何单词:(爱尔兰语、犹太语、夏威夷语、印度教语)'(\w+\.?\s?){0,3}'
专门用来得到“So”。是。“这是我遇到麻烦的部分。我有印度血统,但不是。是。印第安人。我还需要得到一些变体,比如“So”。是。印第安人,南美洲印第安人,所以。A、 印第安,南美洲。“印第安人”'\((.*?)\)\'
(与第二部分一起)得到额外的子部落so:Africa(Fang)我希望将这些工作分成两个组,但稍后我可以在代码中处理三个组。如果有人有什么想法,我会非常感激的。在
示例(javascript)
输出
^{pr2}$在一个组中添加一个像
{0,3}
这样的重复运算符的问题是,该组的反向引用每次匹配时都会被覆盖。如果要捕获整个重复匹配,则需要使用嵌套组:这将生成一个额外的反向引用(在本例中是
^{pr2}$\2
),您可以忽略它,但是如果这让您感到困扰,许多regex引擎也为非引用组使用(?: )
语法:相关问题 更多 >
编程相关推荐