出于教育目的,我尝试匹配以下内容的姓名,电话和电子邮件:
John
+1 288298600
john@site.com
Billy
Mike
+1 768397651
mike@site.com
Patrick
+2 938468172
Jack
jack@site.com
我知道如何从中获取所有电子邮件和所有手机,但我想在这里做的不同。
我希望得到每个名字(John,Billy,Mike,Patrick,Jack)他们的电话(如果有的话)和他们的电子邮件(如果有的话)。所以匹配就像
'John', '+1 288298600', 'john@site.com'
'Billy', '', ''
'Mike', '+1 768397651', 'mike@site.com'
'Patrick', '+2 93868172', ''
'Jack', '', 'jack@site.com'
请注意,如果没有相应的信息(电话或电子邮件),则它与空字符串匹配。我怎样才能做到这一点?
我的尝试:([A-Za-z0-9]+)(?:.*?(\+.*?)|.*?)(?:.*?(.*?\@site.com)|.*?)
任何人都可以指导我朝正确的方向发展吗?
答案 0 :(得分:0)
不要尝试使用多个匹配来执行此操作,它不会引导您到任何地方。相反,每个条目匹配一次,并使用捕获组来提取相关数据。
这是一个示例(带有mx
标志):
^(?<name>[\p{L}\h]+$)\R
(?:(?<phone>^\+[\d\h]+$)\R)?
(?<mail>^.+?@.+?\..+)?
第一行与名称匹配,后跟换行符。第二行是可选的 - 它匹配电话号码,后跟换行符。第三行也是可选的,与邮件匹配。
如果需要,您可以优化子模式,我只选择了一些似乎与输入数据一起使用的子模式。