Regex 如何为此构建正则表达式?
数据: 有人能推荐一个以上的正则表达式吗? 我需要检测10位数字并将其表示为Regex 如何为此构建正则表达式?,regex,Regex,数据: 有人能推荐一个以上的正则表达式吗? 我需要检测10位数字并将其表示为650-724-6354很简单: (650 ) 724-6354 (650) 724-6354 (650)724-6354 650 724-6354 650 724 6354 650 724 6354 这将为您提供3个正则表达式捕获中的数字: Search: .*(\d{3}).*(\d{3}).*(\d{4}) Replace: \1-\2-\3 在PCRE语法中,可能的解决方案是: /(\d{3})[
650-724-6354
很简单:
(650 ) 724-6354
(650) 724-6354
(650)724-6354
650 724-6354
650 724 6354
650 724 6354
这将为您提供3个正则表达式捕获中的数字:
Search: .*(\d{3}).*(\d{3}).*(\d{4})
Replace: \1-\2-\3
在PCRE语法中,可能的解决方案是:
/(\d{3})[ \)]+(\d{3})[ \-]+(\d{4})/
然后,$1、$3、$5将包含您要查找的总共10个数字。这里是一个更完整的建议,减少了更复杂字符序列的缺陷 一个用python编写的简单代码段,考虑到组之间的任何类型字符,返回每个数字序列的组成部分
/\(?\s*(\d{3})\s*\)?(\s*|-)(\d{3})(\s*|-)(\d{4})/
下面是使用示例字符串的测试代码:
import re
def get_components(phone_str):
rex = re.compile(r"[^\d]*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4})[^\d]*")
return rex.findall(phone_str)[0]
你试过什么吗?它太简单了,只能在给定的字符串上工作。对于比括号或破折号更复杂的分隔符?考虑到通用验证,这是一个不完整的解决方案是的,它过于简单,但它适用于问题中显示的字符串。你知道,.@tompave:很抱歉,如果我不想检测序列6507246354,我该怎么办。目前它检测到了。我不知道你的意思。该正则表达式适用于字符串中的任何数字,如示例中的数字。然后,数字组将在捕获中可用(正则表达式中的括号组)。如果您想用连字符显示它们,恐怕这取决于您使用的语言。@tompave:谢谢您的回复。我的意思是,我忘了在我的示例中再提到一个例子,即它不应该考虑序列6507246354。目前它捕获了这个序列。可以对正则表达式执行某些操作,这些操作将在上面的示例中起作用,但不应在示例6507246354中起作用。
test_strs = [
"650 724 6354",
"(650 ) 724-6354",
"(650) 724-6354",
"(650)724-6354",
"650 724-6354",
"650 724 6354",
"650 724 6354",
]
print(["%s-%s-%s"%get_components(p) for p in test_strs])