Regex 正则表达式任何具有动态大小的字符
我想使用一个正则表达式来做以下事情(为了简化,我提取了我遇到麻烦的部分): 第一个字符为1到5个,然后是“下划线”,然后是一些数字,然后是“下划线”,然后是一些数字或点 对“下划线”进行限制后,应给出如下内容:Regex 正则表达式任何具有动态大小的字符,regex,lazy-evaluation,Regex,Lazy Evaluation,我想使用一个正则表达式来做以下事情(为了简化,我提取了我遇到麻烦的部分): 第一个字符为1到5个,然后是“下划线”,然后是一些数字,然后是“下划线”,然后是一些数字或点 对“下划线”进行限制后,应给出如下内容: ^([^_]{1,5})_([\\d]{2,3})_([\\d\\.]*)$ 但是我想允许在1-5个字符中使用“u”,以防它仍然与正则表达式的结尾匹配,例如,如果我有这样的想法: to_to_123_12.56 我认为这与正则表达式引擎中的一个迫切问题有关,尽管如此,我还是尝试了一些
^([^_]{1,5})_([\\d]{2,3})_([\\d\\.]*)$
但是我想允许在1-5个字符中使用“u”,以防它仍然与正则表达式的结尾匹配,例如,如果我有这样的想法:
to_to_123_12.56
我认为这与正则表达式引擎中的一个迫切问题有关,尽管如此,我还是尝试了一些懒惰的事情,如解释,但没有成功
有什么想法吗?我使用了下面的正则表达式,它似乎很适合您的任务。我只是用
替换了您的首字母[^\u]
^.{1,5}_\d{2,3}_[\d\.]*$
最好也用+
替换你的最后一个*
,除非你在最后一个“\ux”之后什么都不允许。请注意,您的最后一部分允许多个“.”(我不知道这是否是您想要的)
下面是我用来验证正则表达式的一个快速Python脚本:
import re
strs = [ "a_12_1",
"abc_12_134",
"abcd_123_1.",
"abcde_12_1",
"a_123_123.456.7890.",
"a_12_1",
"ab_de_12_1",
]
myre = r"^.{1,5}_\d{2,3}_[\d\.]+$"
for str in strs:
m = re.match(myre, str)
if m:
print "Yes:",
if m.group(0) == str:
print "ALL",
else:
print "No:",
print str
输出为:
Yes: ALL a_12_1
Yes: ALL abc_12_134
Yes: ALL abcd_134_1.
Yes: ALL abcde_12_1
Yes: ALL a_123_123.456.7890.
Yes: ALL a_12_1
Yes: ALL ab_de_12_1
这是你的榜样。无论是否使用惰性量词,结果都不会改变。在回答评论(编写惰性表达式)时,我发现我犯了一个错误。。。如果我简单地使用下面的经典正则表达式,它是有效的:
^(.{1,5})_([\\d]{2,3})_([\\d\\.]*)$
谢谢。您能给出您希望匹配和不匹配的字符串的示例,以及您尝试的惰性表达式吗?我只是弄错了,我在这里编写正则表达式时发现我错了。(我在做[.]{1,5})事实上,我要用+代替*
^(.{1,5})_([\\d]{2,3})_([\\d\\.]*)$