我正在尝试匹配以下格式的值:
, ####-####-####-#######
, ####-########-#####
, ######-###-#-###-##-#-####
, ##-####-#####-#-######
例如: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个值匹配,因此不应该匹配。
答案 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,}).*'