我刚开始学regex。
我试图搜索一个简短的‘短语’列表,以找到英国移动电话号码(从+44或07开始,有时以一个空格划分的数字开始)。我很难让它返回开始+44的号码。
这就是我写的:
for snippet in phrases:
match = re.search("\\b(\+44|07)\\d+\\s?\\d+\\b", snippet)
if match:
numbers.append(match)
print(match)哪种指纹
<_sre.SRE_Match object; span=(19, 31), match='07700 900432'>
<_sre.SRE_Match object; span=(20, 31), match='07700930710'>而忽略了“短语”中的+44770090999这个数字。
我试着用和不带括号。如果没有括号,它还会以“10+44=54.”这样的和打印+44。在+44之前反斜杠是否必要?对我错过了什么有什么想法吗?
感谢大家!
编辑:我的一些输入:
phrases = ["You can call me on 07700 900432.",
"My mobile number is 07700930710",
"My date of birth is 07.08.92",
"Why not phone me on 202-555-0136?"
"There are around 7600000000 people on Earth",
"If you're from overseas, call +44 7700 900190",
"Try calling +447700900999 now!",
"56+44=100."] 发布于 2018-06-23 19:45:31
在正则表达式中,字界 \b不匹配空格和加号。
您可以做的是匹配07或+44,然后匹配一个数字或一个空格一次或多次[\d ]+,然后再匹配一个数字\d,在末尾不匹配空格,并在末尾添加一个单词边界\b。
演示Python
发布于 2018-06-22 15:35:51
正则表达式的问题是,第一个\b匹配+和4之间的单词边界。空间和+之间的边界不是单词边界。这意味着它无法在+44之后找到\b,因为+位于\b的左边。在44的右边只有\b。
要解决这个问题,您可以使用一个负面的回顾,以确保在+44之前没有单词。请记住将其放入捕获组中,因为只有在选择了+44选项时才应该匹配它。如果是以07开头的话,您仍然希望匹配一个单词边界。
((?!\w)\+44|\b07)\d+\s?\d+\b您可以将正则表达式放在r""字符串中。这样你就不用写那么多斜杠了:
r"((?!\w)\+44|07)\d+\s?\d+\b"发布于 2018-06-22 14:46:33
这会有帮助的。
import re
phrases = ["Hello +4407700 900432 World", "Hello +44770090999 World"]
for snippet in phrases:
match = re.search(r"(?P<num>(\+44|07)\d+\s?\d+)", snippet)
if match:
print(match.group('num'))输出:
+4407700 900432
+44770090999https://stackoverflow.com/questions/50990333
复制相似问题