正则表达式是一个类似日期的字符串

时间:2014-02-20 16:12:06

标签: python regex

我正在尝试从字符串022014-101中提取子字符串str1

str1 = <C:\User\Test\xyz\022014-101\more\stuff\022014\1>
             # I dont need the 2nd 022014, only the first occuring one 022014-101

我通常使用split("\\")并在\之后拆分字符串以获取[-5]项,但如果我有更多子文件夹,那就太糟糕了......正如您所看到的那样022014-101的前6位数字表示日期加上一些字符(在这种情况下为-101)。我想我应该使用正则表达式,但是如何匹配6位数并获取所有内容直到\出现。我对正则表达式没有太多经验,有谁知道解决方案?感谢。

3 个答案:

答案 0 :(得分:3)

试试这个:(?<=\\)[\d]{6}[^\\]*

示例: http://regex101.com/r/qQ0tR3

<强>解释

(?<=\\)         # Lookbehind for a \ (escaped \\)
[\d]{6}         # Followed by 6 digits
[^\\]*          # Followed by 0+ characters other than a \ (escaped \\)

这将确保您的6位数日期在\之后直接显示,并包含所有内容直至下一个\

答案 1 :(得分:1)

如何:(\d{6}.*?)\\,第一个匹配组会给你你想要的东西。见http://regex101.com/r/aP3bJ7

答案 2 :(得分:0)

试试这个(第一场比赛永远是你需要的):

\\([\d\-]+)\\

演示:

http://regex101.com/r/pI0yP7

说明:

"\\([\d-]+)\\"

\\ matches the character \ literally
        1st Capturing group ([\d-]+)
        [\d-]+ match a single character present in the list below
        Quantifier: Between one and unlimited times, as many times as possible, giving back as needed [greedy]
        \d match a digit [0-9]
        - the literal character -
\\ matches the character \ literally