我有一個名稱列表中的文件,例如字符串列表:解析使用正則表達式
(約翰|瑪麗|鮑勃)(安德森|布魯克斯|庫克)
我試圖使用正則表達式來提取數據出來像字符串:
約翰·安德森 約翰·布魯克斯 約翰庫克 瑪麗·安德森 瑪麗·布魯克斯 瑪麗庫克 鮑勃·安德森 鮑勃·布魯克斯 鮑勃庫克
我在RegEx是相當新的,所以任何幫助將被折扣。謝謝
我有一個名稱列表中的文件,例如字符串列表:解析使用正則表達式
(約翰|瑪麗|鮑勃)(安德森|布魯克斯|庫克)
我試圖使用正則表達式來提取數據出來像字符串:
約翰·安德森 約翰·布魯克斯 約翰庫克 瑪麗·安德森 瑪麗·布魯克斯 瑪麗庫克 鮑勃·安德森 鮑勃·布魯克斯 鮑勃庫克
我在RegEx是相當新的,所以任何幫助將被折扣。謝謝
它看起來像你的源文件已經在正則表達式形式,所以你的問題基本上只是生成匹配該正則表達式的字符串。
看這個問題的一些建議:Reversing a regular expression in Python
這不是你可以用正則表達式做。正則表達式引擎匹配文本,他們不能做笛卡爾產品。當然,你可以使用正則表達式來開始。讓我們看看 - 在Python中,我會這麼做
>>> import itertools
>>> import re
>>> s = "(John|Mary|Bob)(Anderson|Brooks|Cook)"
>>> names = [name.split("|") for name in re.findall(r"\(([^()]*)\)", s)]
>>> names
[['John', 'Mary', 'Bob'], ['Anderson', 'Brooks', 'Cook']]
>>> [" ".join(item) for item in itertools.product(*names)]
['John Anderson', 'John Brooks', 'John Cook', 'Mary Anderson', 'Mary Brooks',
'Mary Cook', 'Bob Anderson', 'Bob Brooks', 'Bob Cook']
僅靠正則表達式無法完成此任務。通常情況下,正則表達式引擎只會匹配輸入中的一個特定位置(比如第一個可能的匹配) - 或者根本沒有 - 所以需要一個循環來迭代,直到所有輸入被消耗或者模式爲no更長的比賽。
與Tim的示例一樣,循環可以是顯式的(如while(true){}),也可以是隱式的。 你沒有說你正在使用什麼語言和/或工具,所以它很難具體 - 正則表達式支持各不相同。在Tim的例子中,循環是由split()和findall()方法隱式提供的。 Perl的split()也提供了一個隱式循環。
到目前爲止您嘗試了什麼? –