字母数字字符和下划线和字符限制的正则表达式

时间:2017-05-02 14:23:20

标签: c# regex xamarin

我想要一个正则表达式来检查字符串是否包含大写和小写字母,数字和下划线以及字符限制。这些是字符串中允许的唯一类型。

但是,字符串不必包含所有指定的参数。

意思是字符串可以是字母数字或字母数字,带下划线或只是数字或只是字母ETC。

我按照此处提供的建议:Regular Expression for alphanumeric and underscores

并提出以下表达式:^([a-zA-Z0-9_]){3,15}$

所以问题是:我的REGEX出了什么问题?

1 个答案:

答案 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_] - 除了否定字符类
    • 中定义的字符以外的0个字符
    • (?: - 来自指定范围的字符
  • [^a-zA-Z0-9_]* - ....完全2次。