Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/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
Python re.fullmatch()是否可以消除正则表达式中对字符串锚的需要_Python_Regex - Fatal编程技术网

Python re.fullmatch()是否可以消除正则表达式中对字符串锚的需要

Python re.fullmatch()是否可以消除正则表达式中对字符串锚的需要,python,regex,Python,Regex,考虑下面的正则表达式,它检查密码强度。它具有开始和结束字符串锚定,以确保它与整个字符串匹配 pattern = re.compile(r'^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[$@$!%*#?&.])[A-Za-z\d$@$!%*#?&.]{8,}$') while True: user_pass = input('Enter a secure password: ') if re.fullmatch(p

考虑下面的正则表达式,它检查密码强度。它具有开始和结束字符串锚定,以确保它与整个字符串匹配

pattern = re.compile(r'^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[$@$!%*#?&.])[A-Za-z\d$@$!%*#?&.]{8,}$')
    while True:
        user_pass = input('Enter a secure password: ')
        if re.fullmatch(pattern, user_pass):
            print('Successfully changed password')
            break
        else:
            print('Not secure enough. Ensure pass is 8 characters long with at least one upper and lowercase letter, number,'
                  ' and special character.')
我注意到Python 3.5有一个re.fullmatch(),它似乎做了同样的事情,但没有字符串锚:

pattern = re.compile(r'(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[$@$!%*#?&.])[A-Za-z\d$@$!%*#?&.]{8,}')
while True:
    user_pass = input('Enter a secure password: ')
    if re.fullmatch(pattern, user_pass):
        print('Successfully changed password')
        break
    else:
        print('Not secure enough. Ensure pass is 8 characters long with at least one upper and lowercase letter, number,'
              ' and special character.')
这是fullmatch的预期目的吗?是否存在可能导致意外问题的情况?

函数和方法

变更日志对此非常明确:

这提供了一种明确比赛目标的方法 避免了一类在代码编写过程中丢失$字符的微妙错误 更改或添加现有常规的替代方案 表情

因此,您使用它的方式确实是此功能的预期目的。它不会导致意外问题,
^
$
只是小心地在内部添加。

函数和方法

变更日志对此非常明确:

这提供了一种明确比赛目标的方法 避免了一类在代码编写过程中丢失$字符的微妙错误 更改或添加现有常规的替代方案 表情


因此,您使用它的方式确实是此功能的预期目的。它不会导致意外问题,
^
$
只是小心地在内部添加。

为什么不直接使用锚定,它的额外字符2比4少?这样,一般熟悉正则表达式的人,但可能不熟悉某些特定于python的东西,就会知道你的意思。@JoranBeasley这一点都没有帮助。你必须输入更多的正则表达式,而了解正则表达式的人就不那么清楚了。。。我不知道他们为什么还要加上。。。因此,它不能回答你的问题,我知道。。。这就是为什么它是一个comment@JoranBeasley你并不是在回答这个问题。关键是有时候你必须明确地使用锚,例如在前瞻条件下。因此,标题有点含糊不清,你不能忘记使用锚。只有当你知道你在做什么的时候才这样做。为什么不直接使用锚,它的额外字符数2比4少?这样,一般熟悉正则表达式的人,但可能不熟悉某些特定于python的东西,就会知道你的意思。@JoranBeasley这一点都没有帮助。你必须输入更多的正则表达式,而了解正则表达式的人就不那么清楚了。。。我不知道他们为什么还要加上。。。因此,它不能回答你的问题,我知道。。。这就是为什么它是一个comment@JoranBeasley你并不是在回答这个问题。关键是有时候你必须明确地使用锚,例如在前瞻条件下。因此,标题有点含糊不清,你不能忘记使用锚。只有当你知道你在做什么的时候才这样做。谢谢你,先生。这就是我要找的
re.match(r'a | ab$,'ab').group()返回
'a'
,而
re.fullmatch(r'a | ab','ab').group()返回
'ab'
。因此,
re.fullmatch(…)
不仅仅是取代
re.match(“…$”)
。这很微妙。我认为这实际上是支持fullmatch的一个例子——最初的re应该写为re.match(r'(a | ab)$,'ab').group(),但是缺少的paren导致了末端锚定“$”只与替换的“ab”分支相关联。谢谢先生。这就是我要找的
re.match(r'a | ab$,'ab').group()返回
'a'
,而
re.fullmatch(r'a | ab','ab').group()返回
'ab'
。因此,
re.fullmatch(…)
不仅仅是取代
re.match(“…$”)
。这相当微妙。我认为这实际上是一个支持fullmatch的示例-原始re可能应该被写为re.match(r'(a | ab)$,'ab').group(),但缺少的paren导致末端锚定“$”只与替换的“ab”分支相关联。