我想要一个正则表达式来检查字符串是否包含大写和小写字母,数字和下划线以及字符限制。这些是字符串中允许的唯一类型。
但是,字符串不必包含所有指定的参数。
意思是字符串可以是字母数字或字母数字,带下划线或只是数字或只是字母ETC。
我按照此处提供的建议:Regular Expression for alphanumeric and underscores
并提出以下表达式:^([a-zA-Z0-9_]){3,15}$
所以问题是:我的REGEX出了什么问题?
答案 0 :(得分:1)
你的正则表达式 - print(list(tree)[0].find('{http://remote.Services}AuthenticateResponse'))
>>> <Element '{http://remote.Services}AuthenticateResponse' at 0x00000000027228B8>
- 匹配一个长度为3到15个字符的整个字符串,只包含ASCII字母,数字或from io import StringIO
tree = ET.iterparse(StringIO("""<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<AuthenticateResponse xmlns="http://remote.Services">
<AuthenticateResult xmlns:a="http://schemas.datacontract.org/2004/07/remote.Services.Api.DataContracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<AdditionalInfo i:nil="true"/>
<ErrorMessage i:nil="true"/>
<ErrorMessageId i:nil="true"/>
<ErrorMessages i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
<InternalId>0</InternalId>
<RecordsAffected>0</RecordsAffected>
<Result>true</Result>
<WarningMessages i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
<a:AuthenticationKey>SUPERSECRETTOKEN</a:AuthenticationKey>
<a:UserGrpId>YYY</a:UserGrpId>
<a:UserId>XXX</a:UserId>
</AuthenticateResult>
</AuthenticateResponse>
</s:Body>
</s:Envelope>"""))
for _, element in tree:
element.tag = element.tag.split('}')[-1]
print(tree.root.find('Body').find('AuthenticateResponse').find('AuthenticateResult').find('AuthenticationKey').text)
>>> 'SUPERSECRETTOKEN'
符号。
您似乎想要检测包含指定范围(字母/数字/下划线)中至少3个字符的字符串。
您可以使用
^([a-zA-Z0-9_]){3,15}$
或者不那么线性:
_
将模式与[a-zA-Z0-9_](?:[^a-zA-Z0-9_]*[a-zA-Z0-9_]){2}
一起使用,此方法允许部分匹配。
<强>详情:
(?:[^a-zA-Z0-9_]*[a-zA-Z0-9_]){3}
- 匹配指定范围内的单个字符Regex.IsMatch
- 开始匹配序列的非捕获组....
[a-zA-Z0-9_]
- 除了否定字符类(?:
- 来自指定范围的字符[^a-zA-Z0-9_]*
- ....完全2次。