我具有以下这些文件名,并使用以下正则表达式进行匹配:
文件名:
我用来匹配文件名的正则表达式是:
(\d+)\s(\d+)\s(\w+\s?\w+)
对于第一个文件,它可以工作,但是对于第二个文件,它与12月匹配,因为这也是两个带有空格的单词。
在两种情况下,如果TEST与DOCUMENT之间没有空格,则如何编写正则表达式以最多仅匹配“ 1234 12345678 TEST DOCUMENT”。
预期结果:
不是第二个文件(1234 12345678 TESTDOCUMENT December)
答案 0 :(得分:3)
鉴于您所说的
“ TEST DOCUMENT”之后,通常是1月-12月格式的一个月
您可以使用前瞻性来确保与月份不符:
(\d+)\s(\d+)\s(\w+\s?(?!Jan|Feb|Mar|...|Dec)\w+)
^^^^^^^^^^^^^^^^^^^^^^^...
这将确保第二个单词不以月份名称开头。
答案 1 :(得分:2)
另一种选择是在末尾匹配“ datelike”格式并捕获捕获组中以前的内容:
(\d+)\s(\d+)\s(.*?)\s\d{1,2},\s\d{4}\.pdf$
@iBug指出,如果您只想匹配文字字符或空格,则可以将(.*?)
替换为([\w ]+)
答案 2 :(得分:1)
只需确保始终将零件与日期匹配,例如:
(\d+)\s(\d+)\s(\w+\s?\w+)\s\w+\s\d+
就足够了。
答案 3 :(得分:0)
您可以从行的开头选择所有内容,后跟(lookahead (?=...)
)空格和月份名称。这是11月和12月:
^.*(?= December| November)
请注意月份名称的大小写(驼峰式,大写等)。此外,您是否已使用不同的语言对数据进行了本地化,月份名称...