Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式任何具有动态大小的字符_Regex_Lazy Evaluation - Fatal编程技术网

Regex 正则表达式任何具有动态大小的字符

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个,然后是“下划线”,然后是一些数字,然后是“下划线”,然后是一些数字或点

对“下划线”进行限制后,应给出如下内容:

^([^_]{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\\.]*)$