使用Python中的正则表达式来匹配字符串长度

5

编写用于字符串的python正则表达式。我希望字符串至少有1个符号,最多30个。问题是我在正则表达式字母中使用了3个子块,因此长度始终必须为3个字符。 在这个正则表达式(1-30字符长度)中添加该条件是否可能:

regex = re.compile("^[a-zA-Z]+[a-zA-Z0-9\.\-]+[a-zA-Z0-9]$")
r = regex.search(login)

谢谢。


为什么不在代码中单独检查它?此外,如果我们有一些有效和无效的1个和2个字符示例输入,那将会很有帮助。 - Martin Ender
哪种长度为1或2的输入将被允许匹配?什么不应该匹配?如果长度增加到3或更多怎么办? - Martijn Pieters
请提供一些示例数据,或者至少说明您要匹配什么? - Ibrahim Najjar
举个例子,将问题中的正则表达式添加到在线正则表达式测试工具中,并写入“ab”。我的意思是,我想使用正则表达式(而不是使用if ...)来检查匹配(>1<30)这个仅包含2个字符的字符串。 - dima.h
a- 会有效吗?- 会有效吗?0 呢?你需要更仔细地思考你的问题。 - Martijn Pieters
Martijn Pieters:只是要求验证长度,而不是字符。 - dima.h
2个回答

8

虽然不清楚您想接受哪些1或2个字符的字符串,但我建议使用以下正则表达式:

regex = re.compile("^[a-zA-Z][a-zA-Z0-9\.\-]{0,28}[a-zA-Z0-9]$")

由于中间部分包含了所有其他内容,因此它将直接匹配您所需的长度为3-30的所有单词。

我希望这个正则表达式也能匹配您的2个字符的字符串(我假设第一个字符必须是字母),您需要添加一些内容(使用“|”)来进行单个字符的匹配。


几乎一样。现在每个人都知道我至少需要15分钟来输入这些答案。天哪。如果你想匹配原始RE中的+而不是*,那么你确实需要将{0,28}更改为{1,28}...所以我想我确实添加了一点微小的东西。 - Mike Housky

1
一般来说,这很困难,需要在正则表达式之外进行一些工作(如M. Buettner的评论中所建议的)。你的问题比较容易,因为它可以简化为只有一个重复元素的模式。
你有一个或多个字母,后面跟着一个或多个(字母、数字、点、连字符),然后是一个单一的(字母或数字),对吗?如果是这样,第一组的重复是不必要的。去掉+即可。
r"^[a-zA-Z][a-zA-Z0-9\.\-]+[a-zA-Z0-9]$"

你将完全匹配相同的字符串集。第一个组以外的任何额外前导字母都将在第二个组中匹配。

现在,您的正则表达式中唯一可变的部分是中间部分。为了将总长度限制为30,您只需要将该中间部分限制为28个字符。将+更改为{1,28}即可得到:

r"^[a-zA-Z][a-zA-Z0-9\.\-]{1,28}[a-zA-Z0-9]$"

你可以在以下链接中了解更多关于Python正则表达式的信息:

http://docs.python.org/2/library/re.html


长度为2的字符串不匹配(例如“ab”) - dima.h

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接