我有以下字符串:
“ ...(一些字符)aaa bbb @@@@ 2018/8/13 ......(一些字符)”
字符串中的@@@
代表一些随机字符。 @@@
的长度未知,可能为None(只是“ aaa bbb 8/13/2018”)。
我的目标是从字符串(8/13/2018)和@@@
的起始索引中查找日期。
我当前使用以下代码:
m = re.search(r'\s.*?([0-9]{1,}/[0-9]{1,}/[0-9]{2,})', str)
m.groups()[0] ## The date
m.start() ## index of @@@
但是正则表达式匹配bbb @@@8/13/2018
而不是@@@8/13/2018
我还尝试将正则表达式更改为:
r'\s(?!\s).*?[0-9]{1,}/[0-9]{1,}/[0-9]{2,}'
r'\s(?!\s)*?[0-9]{1,}/[0-9]{1,}/[0-9]{2,}'
但是它们都不起作用。
如有任何帮助或评论,我将不胜感激。谢谢。
答案 0 :(得分:1)
使用正则表达式的一部分,我想你的意思是这样
r'\S*([0-9]+/[0-9]+/[0-9]{2,})'
https://github.com/jynus/query-optimization
要找到起始索引,那就是找到匹配项的地方。
请注意,\S
将找到所有连续的非空白。
您可以将其更改为[@a-zA-Z]
等其他内容,只需将其添加到类中即可。
答案 1 :(得分:1)
我倾向于认为您正在寻找:
@*(?:\d{1,2}/){2}\d{2,4}
甚至是\S*(?:\d{1,2}/){2}\d{2,4}
这只是说:
\S*
以0或多个非空格字符开头。 (?:\d{1,2}/){2}
找到两组\d{1,2}/
,但不捕获它们。即未捕获:(?:..)
。这将与8/13 /部分中的月份和日期匹配。 \d{1,2}
表示至少一位数字,最多两位数字
\d{2,4}
与年份匹配。至少2位,最多4位