匹配数字或UUID的正则表达式

6
我需要一个可以宽松匹配UUID和数字的正则表达式。我期望我的文件名格式如下:
results_SOMETHING.csv

这个东西最好是数字(脚本运行次数的计数)或UUID。

这个正则表达式包含了大量的文件名:

 ^results_?.*.csv$

并且还有这一个:

 ^results_?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}.csv$

需要的正则表达式应该只匹配某个范围内的UUID,而不是所有的UUID。大多数情况下,我不希望像result__123.csv这样的匹配结果。

2个回答

13

注意: 这并不是直接回答 OP 问题,但鉴于标题,它将出现在搜索结果中。

这里有一个适用于此格式(没有十六进制字符限制)的 UUID 正则表达式:

(\w{8}(-\w{4}){3}-\w{12}?)

如果你只想匹配十六进制字符,可以使用:

/([a-f\d]{8}(-[a-f\d]{4}){3}-[a-f\d]{12}?)/i

(请注意在 Javascript 中使用的/定界符和 /i 标志表示大小写不敏感;根据您所使用的语言,您可能需要以不同的方式编写此代码,但肯定要处理大小写字母)。

如果你在 UUID 前面添加了 results_ 并在结尾添加了 .csv,那么如下所示:

^results_([a-z\d]{8}(-[a-z\d]{4}){3}-[a-z\d]{12}?).csv$


z 不是十六进制。 - Jerry
谢谢你的帮助。这个代码运行得非常好:"^results((([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|[a-zA-Z0-9]+))([a-zA-Z0-9]+)?)?\.csv$"。 - user1071840
你可以使用\h来表示十六进制字符 /^\h{8}(-\h{4}){3}-\h{12}$/ - Cyril Duchon-Doris
我写下这个答案已经很久了,我也不太确定。 - brandonscript

1

-----编辑/更新-----

根据您留下的评论,您还想匹配一些其他模式(这在问题中对我来说不太清楚)。这使得问题变得更具挑战性 - 总结我的当前理解:

results.csv                                         - match (NEW)
results_1A.csv                                      - match (NEW)
results_ABC.csv                                     - ? no match (I assume)
result__123.csv                                     - no match
results_123.csv                                     - match
Results_123.cvs                                     - ? no match
results_0a0b0c0d-884f-0099-aa95-1234567890ab.csv    - match

您会发现以下修改按照上述“规范”进行:
results(?:_(?:[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}|(?=.*[0-9])[A-Z0-9]+))?\.csv

分解如下:

results               matches characters "results" literally
(?:_ ….)?             non-capturing group, repeated zero or one time:
                      "this is either there, or there is nothing"
[0-9a-f]{8}-          exactly 8 characters from the group [0-9a-f]
                      followed by hyphen "-"
(?:[0-9a-f]{4}-){3}   ditto but group of 4, and repeated three times
[0-9a-f]{12}          ditto, but group of 12
|                     OR...
(?=.*[0-9]+)          at least one number following this
[A-Z0-9]+             at least one capital letter or number
\.csv                 the literal string ".csv" (the '.' has to be escaped)

在regex101.com上演示正则表达式


如果允许使用数字和字符的ID,那么应该做出哪些更改?例如:results_1A.csv? - user1071840
^results_?([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|[a-zA-Z0-9]{1,}).csv$ - user1071840
这与results.csv不匹配。 - user1071840

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接