Regex 什么是正则表达式来匹配文件的完整路径,该文件的字母数字名称仅以数字结尾?
我有一组字符串。它们是文件的完全绝对路径。从这个列表中,我想选择那些包含文件名的路径,该文件名以下划线结尾,后跟三位数字,后跟扩展名 文件名必须以字母开头,而不是数字或下划线,然后可以包含任意数量的字母、数字和下划线。在结尾处,它必须在扩展名前有下划线和三位数字 我尝试使用\w,但它已包含数字,因此将与那些不以数字结尾的文件匹配。我只找到了这两个,但还不够好:Regex 什么是正则表达式来匹配文件的完整路径,该文件的字母数字名称仅以数字结尾?,regex,Regex,我有一组字符串。它们是文件的完全绝对路径。从这个列表中,我想选择那些包含文件名的路径,该文件名以下划线结尾,后跟三位数字,后跟扩展名 文件名必须以字母开头,而不是数字或下划线,然后可以包含任意数量的字母、数字和下划线。在结尾处,它必须在扩展名前有下划线和三位数字 我尝试使用\w,但它已包含数字,因此将与那些不以数字结尾的文件匹配。我只找到了这两个,但还不够好: \w(_[0-9]{3})\.(vhd|vhdl|sv|v)$ (_[0-9]{3})\.(vhd|vhdl|sv|v)$ 以下是几
\w(_[0-9]{3})\.(vhd|vhdl|sv|v)$
(_[0-9]{3})\.(vhd|vhdl|sv|v)$
以下是几个例子:
这些将不匹配:
./Qsys_Systems/MY_SYS_TB/simulation/submodules/1_MY_SYS_TB_mm_interconnect_0_router.sv
./Qsys_Systems/MY_SYS_TB/simulation/submodules/_MY_SYS_TB_mm_interconnect_0_router.sv
./Qsys_Systems/MY_SYS_TB/simulation/submodules/MY_SYS_TB_mm_interconnect_0_router.sv
这些将通过比赛:
./Qsys_Systems/MY_SYS_TB/simulation/submodules/MY_SYS_TB_mm_interconnect_0_router_001.sv
./Qsys_Systems/MY_SYS_TB/simulation/submodules/MY_SYS_TB_mm_interconnect_0_router_002.sv
./Qsys_Systems/MY_SYS_TB/simulation/submodules/MY_SYS_TB_mm_interconnect_0_router_004.sv
根据您的描述,您可以使用
^(?:.*/)?[a-zA-Z]\w*\d{3}\(?:vhd | vhdl | sv | v)$
看
详情:
-字符串开始^
-任意文本(尽可能多的断行字符以外的任何零个或多个字符)的可选序列,然后是一个(?:.*/)?
字符/
-一封信[a-zA-Z]
-零个或多个字母/数字/\w*
\u
-下划线。
-三位数字\d{3}
-a\.
-扩展之一(?:vhd | vhdl | sv | v)
-字符串结束$
[0-9]
来匹配数字:^(.*/)?[:alpha:][[u[:alnum:]*.[u0-9]{3}\(vhd | vhdl | sv | v)$
如果正则表达式风格支持Unicode属性类,则可以使用与任何Unicode字母匹配的\p{L}
或[[:alpha:]
POSIX字符类替换[a-zA-Z]
请参阅。问题是,使用^s会使模式失败。我将给出一些有疑问的例子。@quantum231请在要点之后对长正则表达式进行更正。这似乎是解决方案^(?:*)[a-zA-Z]\w*\d{3}\(?:vhd | vhdl | sv | v)$您能解释一下(?:*)的作用吗?