我正在尝试从字符串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位数并获取所有内容直到\
出现。我对正则表达式没有太多经验,有谁知道解决方案?感谢。
答案 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\-]+)\\
演示:
说明:
"\\([\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