我正在聊天组中工作,我想获取发送消息的用户的号码或姓名
我创建了一个模式来获取电话号码,然后我拨打了patternnumber
。我不知道如何在模式中使用逻辑运算符
re.search(r'[a-zA-Z]{3,}','11/09/2017 21:46 - Robert: Hello world\n')
<re.Match object; span=(19, 25), match='Robert'>
然而
re.search(patternnumber or r'[a-zA-Z]{3,}','11/09/2017 21:46 - Robert: Hello world\n')
什么也没给我
我已经尝试使用|
而不是“or”,但它给出了一个错误。我怎样才能解决这个问题
下面的一个答案部分解决了我的第一个问题,请参见:
re.search(r'patternnumber|[a-zA-Z]{3,}','11/09/2017 21:46 - Robert: Hello world\n')
<re.Match object; span=(19, 25), match='Robert'>
好的,但是当我添加电话号码而不是姓名时,我有另一个问题:
patternnumber = r'(\(|\+)*\d{1,3}\)* \(*\d{2,5}\)* \d{2,7}((\-|\s)\d{2,5})*((\-|\s)\d{2,5})*'
re.search(r'patternnumber|[a-zA-Z]+','13/09/2017 22:10 - +55 85 8507-4394: Hello world\n')
<re.Match object; span=(37, 42), match='Hello'>
re.search(r'(\(|\+)*\d{1,3}\)* \(*\d{2,5}\)* \d{2,7}((\-|\s)\d{2,5})*((\-|\s)\d{2,5})*|[a-zA-Z]+','13/09/2017 22:10 - +99 99 9999-9999: Hello world\n')
<re.Match object; span=(19, 35), match='+99 99 9999-9999'>
这应该是我所期望的答案
我不知道发生了什么,模式是一样的,区别在于一个是我之前创建的变量,另一个是我直接调用的变量:
代码无法工作的原因是
or
语句在启动search
之前得到了求值。or
语句将返回其中的第一个非空字符串如果第一个字符串为空,第二个字符串为空,则将使用第二个字符串。如果两者都不是空的,则将使用第一个字符串。在本例中,
patternnumber
不是一个空字符串,因此它使用patternnumber
进行搜索,不返回任何内容将
or
从括号中取出:可以在正则表达式中使用“|”运算符
其中,patternnumber应该是写出的正则表达式,而不是变量
相关问题 更多 >
编程相关推荐