正则表达式不匹配:在任何地方搜索一定数量的数字

时间:2018-08-28 04:19:07

标签: python regex python-3.x

我正在尝试匹配以下格式的值:

, ####-####-####-#######
, ####-########-#####
, ######-###-#-###-##-#-####
, ##-####-#####-#-######

例如:2018-03-10, 2018123-02-10-2019, 10-20-20232316

应该只捕获, 2018123-02-10-2019, 10-20-20232316

开头的,是可选的。我基本上是在寻找逗号之间位于5位或更多位数字的值。即12345而非123 other stuff 45

我的解决方案是编写三行正则表达式,分别查看开始,结束和中间。起点和终点都很好,但是我不确定如何进行中间操作。

有人可以帮我解决这个问题吗?

编辑#1:

提供的上下文:

我正在使用正则表达式,并使用替换函数替换当我尝试提取日期时都返回的不同值的大杂烩。

我实际上是在做类似".replace(('regular expression':'aaaaaa (this gets filtered out'), regex=True)

的事情

编辑#2:

我正在使用regexone来测试结果。

我尝试使用(?=,?)[^, ]*\d{5,}[^,]*,但由于某种原因,它与1个值匹配,因此不应该匹配。

sample from regex editor

3 个答案:

答案 0 :(得分:2)

import re
text = "2018-03-10, 2018123-02-10-2019, 10-20-20232316"
re.findall(r'\w+(?:-\w+)+',text)

答案 1 :(得分:2)

data = '2018-03-10, 354687-56987-314, 2018123-02-10-2019, 10-20-20232316'
re.findall(r'[^, ]*\d{5,}[^,]*',data)

Out[847]: ['354687-56987-314', '2018123-02-10-2019', '10-20-20232316']

编辑

可以使用给出正则表达式\S*\d{5,}[^,\s]*的示例

答案 2 :(得分:0)

尝试以下正则表达式。这将捕获具有5个或更多连续数字的任何东西。

r'.*(\d{5,}).*'