Python正则表达式:两者之间没有空格

时间:2018-08-14 00:13:17

标签: regex python-2.7

我有以下字符串:

“ ...(一些字符)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,}'

但是它们都不起作用。

如有任何帮助或评论,我将不胜感激。谢谢。

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位