在python中使用正则表达式匹配字符串长度

在python中使用正则表达式匹配字符串长度,python,regex,python-2.7,Python,Regex,Python 2.7,为字符串编写python正则表达式。我希望字符串至少为1个符号,最多为30个。问题是,我在正则表达式字母中使用了3个子块,所以总有3个字符长。 是否可以在此正则表达式中添加该条件(长度为1-30个字符): 谢谢。虽然不清楚您要接受哪一个1或2长度的字符串,但我建议使用以下正则表达式: regex = re.compile("^[a-zA-Z][a-zA-Z0-9\.\-]{0,28}[a-zA-Z0-9]$") 由于中间的集合包括所有其他集合,这将直接匹配所有长度为3-30的单词 我希望这个正

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


谢谢。

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

regex = re.compile("^[a-zA-Z][a-zA-Z0-9\.\-]{0,28}[a-zA-Z0-9]$")
由于中间的集合包括所有其他集合,这将直接匹配所有长度为3-30的单词


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

一般来说,这很困难,并且经常需要在RE之外做一些工作(正如M.Buettner的评论中所建议的那样)。您的问题更容易,因为它可以简化为只有一个重复元素的模式

您有一个或多个字母,后跟一个或多个(字母、数字、点、连字符)和一个(字母或数字),对吗?如果是这样,则不需要重复第一组。取消+以获得

r"^[a-zA-Z][a-zA-Z0-9\.\-]+[a-zA-Z0-9]$"
您将完全匹配相同的字符串集。超过第一组的任何额外前导字母将在第二组中匹配,而不是在第一组中匹配

现在,RE的唯一可变部分是中间部分。要将总长度限制为30,只需将中间部分限制为28个字符。将+更改为{1,28}以获得:

r"^[a-zA-Z][a-zA-Z0-9\.\-]{1,28}[a-zA-Z0-9]$"
有关Python REs的更多信息,请访问:


为什么不在代码中单独检查?此外,如果我们有一些有效和无效的1字符和2字符示例输入,这将非常有用。允许哪种长度为1或2的输入匹配?什么不应该匹配?如果长度为3或更大,该怎么办?请提供一些示例数据,或者至少您要匹配什么?例如,将此regexp from question添加到在线regexp测试工具,并写“ab”。我的意思是我想检查匹配(>1)是否
a-
有效?是否
-
有效?关于
0
呢?你需要仔细考虑你的问题。尽管如此。现在每个人都知道我至少需要15分钟才能键入其中一个答案。嘘。你想把{0,28}改为{1,28}如果您想在原始RE中匹配+而不是*,那么…我想我确实添加了一个microsopic位。2个字符长度的字符串不匹配(例如“ab”)
r"^[a-zA-Z][a-zA-Z0-9\.\-]{1,28}[a-zA-Z0-9]$"