如果找不到匹配项,则regex返回匹配项

时间:2019-12-16 06:59:12

标签: regex

我有一个文件命名模式,例如

这是9876文件名 .1234.ext

OR

thisisa9876文件名 .4321.ext

通过使用

,我可以很容易地为.1234.ext返回一个匹配项。

/(\.\d{4}\.ext)$/

我想做的就是找到匹配的格式(如果不是这种格式的话)。例如

thisisa9876filename.123.ext

OR

这是9876文件名。txe

如果它与该模式不匹配,那么我想返回一个匹配项。

我似乎无法解决这个问题。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

要了解@Nick建议的解决方案,并假设您使用R或可以使用R,则解决方案可以是: 如果这是您的数据(例如):

data <- c("thisisa9876filename .4321.ext", "thisisa9876filename.123.ext", 
          "this is a 9876 file name.txe", "this is a 9876 file name .1234.ext")

然后您可以使用grep及其参数invert = T来匹配模式不匹配的任何内容:

grep("\\d{4}\\.ext$", data, value = T, invert = T)
[1] "thisisa9876filename.123.ext"  "this is a 9876 file name.txe"

答案 1 :(得分:0)

如果支持否定的前瞻(?!,则可以断言该字符串不以您的模式结尾:

^(?!.*\.\d{4}\.ext$).+$
  • ^字符串的开头
  • (?!负向前进,断言右边的不是
    • .*\.\d{4}\.ext$匹配点和4位数字,并在字符串末尾加上.ext
  • )提前关闭
  • .+匹配除换行符1次以上以外的所有字符
  • $字符串的结尾

Regex demo