出于教育目的,我正在尝试匹配以下内容的名称、电话和电子邮件:
John
+1 288298600
john@site.com
Billy
Mike
+1 768397651
mike@site.com
Patrick
+2 938468172
Jack
jack@site.com
我知道如何从那里获得所有的电子邮件和电话,但我想在这里做的是不同的。
我想为每个名字(约翰、比利、迈克、帕特里克、杰克)弄到他们的电话(如果有的话)和电子邮件(如果有的)。所以比赛就像
'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)|.*?)
有人能指引我朝正确的方向走吗?
不要试图使用多个匹配来实现这一点,这不会给你带来任何结果。相反,每个条目匹配一次,并使用捕获组提取相关数据。
下面是一个示例(带有mx
标志):
^(?<name>['p{L}'h]+$)'R
(?:(?<phone>^'+['d'h]+$)'R)?
(?<mail>^.+?@.+?'..+)?
演示
第一行与名称匹配,后面跟着一行换行符。第二行是可选的——它匹配一个电话号码,后面跟着一个换行符。第三行也是可选的,与邮件匹配。
如果需要,您可以细化子模式,我只是选择了一些似乎可以与您的输入数据配合使用的子模式。