Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.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 我需要一个正则表达式,以照顾秩序和其他一般要求_Python_Regex - Fatal编程技术网

Python 我需要一个正则表达式,以照顾秩序和其他一般要求

Python 我需要一个正则表达式,以照顾秩序和其他一般要求,python,regex,Python,Regex,我在网上搜索了很多,没有找到一个能满足订单和其他一般要求的正则表达式,我的具体需求如下: 以字母开头; 至少6个字符; 至少1位。 我在python中工作,我想我知道如何为2和3编写正则表达式,但没有找到一种方法来组合1,因为它涉及顺序。 类似地,我知道如何编写1,但没有找到一种方法将它与一般需求regex结合起来,意思是括号regex。。。我不知道名字 对于2和3: ^(?=.{6,})(?=.*[\d]).*$ 对于1: ^[a-zA-Z].* 任何建议?^?=.{6,}[a-zA-Z]

我在网上搜索了很多,没有找到一个能满足订单和其他一般要求的正则表达式,我的具体需求如下:

以字母开头; 至少6个字符; 至少1位。 我在python中工作,我想我知道如何为2和3编写正则表达式,但没有找到一种方法来组合1,因为它涉及顺序。 类似地,我知道如何编写1,但没有找到一种方法将它与一般需求regex结合起来,意思是括号regex。。。我不知道名字

对于2和3:

^(?=.{6,})(?=.*[\d]).*$
对于1:

^[a-zA-Z].*

任何建议?

^?=.{6,}[a-zA-Z]..\d.*$都是您需要的。

构建与a、B和C匹配的连词表达式的一般方法是从^开始,然后将条件列为前瞻组:

^(?=A)(?=B)(?=C)
就你而言:

^(?=[A-Za-z])(?=.{6,})(?=\D*\d) 
关于为什么这个表达式不能与$一起使用的问题:

这是因为它不使用任何字符,除了输入的虚拟起始字符。当您向其附加$时,它将等效于^$,它只能匹配空字符串

我的具体需要如下:

以字母开头; 超过6个字符; 至少1位。 那就别管正则表达式了。直接测试所需的属性

len(x) > 6 and x[0].isalpha() and any(c.isdigit() for c in x)

首先不要假设正则表达式是解决方案。然后想想其他可用的工具

以字母开头:

word and word[0].isalpha()
如果此测试在长度1之后进行,则可以删除字和位

至少六个字符长:

len(word) >= 6
至少一位数字:

any(letter.isdigit() for letter in word)
最后一个是关于单词长度的,但是,如果你使用20个字符而没有数字,它实际上会比RE解决方案慢,因为字符串实例化;您可以反驳,如果没有早期数字的长字符串在这个相当冗长的版本中经常出现:

('0' in word or '1' in word or '2' in word or '3' in word or
'4' in word or '5' in word or '6' in word or '7' in word or
'8' in word or '9' in word)
然后,您可以轻松地将它们结合起来。记住,在这样的情况下,将它放在一个单独的函数中,并使用适当的docstring;不要把神奇的计算放在其他无关的事情中间

def word_rule_check(word):
    '''
    Check that the word complies to Rule such-and-such; it must:

    1. start with a letter,
    2. be at least 6 characters long, and
    3. contain at least one digit.
    '''

    return (len(word) >= 6 and
            word[0].isalpha() and
            any(letter.isdigit() for letter in word))

正则表达式在测量长度方面不是很有效,只需使用python len即可。 至于其他两个条件,请尝试以下方法:

[a-zA-Z][a-zA-Z0-9]*[0-9][a-zA-Z0-9]*

发布示例输入和输出。把你到目前为止的工作发出去。所以像A--1这样的东西就足够了?*我愿意接受每一封英文信*什么是\D*这是订单吗?正如我所说,我需要第一个字符是一个英文字母你所说的关心订单是什么意思?这个表达式只匹配以字母开头的字符串。好的,在我删除$符号后,它工作了。你能解释一下吗?在一个。。。事项?我想是的\D@user1413824-什么标志?您是否使用另一个答案中的正则表达式?\D是非数字。这是一个很小的优化,一个简单的点也可以。这并不能回答问题。他想要一个正则表达式。这可能是一个家庭作业问题。@mhawke:严格地说,我确实没有回答这个问题。但是你会否认这是解决他的问题的更好办法吗?这是解决一般问题的更好办法:如果他需要正则表达式,这可能不是解决他的问题的办法。我强烈怀疑他是否需要正则表达式。这只是一个标准的想法,认为你应该用正则表达式来实现它,而不考虑它是否是最好的解决方案。。。。或正则表达式是必需的,因为它将用于现有的基于正则表达式的验证器,或者它是一个家庭工作问题。请考虑一些类似的A123。@ THG435:好的。所以这封信可以是任何东西。^?=.{6,}[a-zA-Z]+\d.$@PrinceJohnWesley:对不起,那时我确实想错了;我在想\w不包括数字。但是@thg435是正确的,并且显示了我接下来要说的,非alnum chars是不会被做的。比\w好。在这种情况下,我不明白您为什么要费心处理。*$部分。省略它比较容易;它毫无价值。而且,你仍然无法应付-123@ChrisMorgan:更新。“我再次认为字母是字母表,而不是符号。”普林斯乔恩维斯利:他说的是字符,不是字母。你应该匹配a-123。这将在索引器上失败。我在类似但更完整的回答中处理了这个问题。@Chris Morgan否;这就是为什么我把len测试放在第一位。
[a-zA-Z][a-zA-Z0-9]*[0-9][a-zA-Z0-9]*