我有一个名称列表中的文件,例如字符串列表:解析使用正则表达式
(约翰|玛丽|鲍勃)(安德森|布鲁克斯|库克)
我试图使用正则表达式来提取数据出来像字符串:
约翰·安德森 约翰·布鲁克斯 约翰库克 玛丽·安德森 玛丽·布鲁克斯 玛丽库克 鲍勃·安德森 鲍勃·布鲁克斯 鲍勃库克
我在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()也提供了一个隐式循环。
到目前为止您尝试了什么? –