猿问

C# RegEx 匹配特定字符串

我需要匹配(使用正则表达式)可以是这样的字符串:

必需:custodian_{number 1 - 9}_{fieldType txt 或 ssn} 可选:_{fieldLength 1-999}

例如: custodian_1_ssn_1 有效 custodian_1_ssn_1_255 有效

custodian 或 custodian_ 或 custodian_1 或 custodian_1_ 或 custodian_1_ssn 或 custodian_1_ssn_ 或 custodian_1_ssn_1_ 无效

目前我正在处理这个:

(?:custodian|signer)_[1-9]?[0-9]_(?:txt|ssn)_[1-9][0-9]?(_[1-9]?[0-9]?[0-9]?)?

因为我的正则表达式和我的 api 正在努力接受:custodian_1_txt_1 custodian_1_ssn_1 custodian_1_txt_1_25 5 <---- 与最后一个“5”不匹配

有什么想法吗?


萧十郎
浏览 495回答 3
3回答

HUX布斯

您可以使用模式:^custodian(?:_[a-z0-9]+)+$^&nbsp;断言位置行首。custodian匹配文字子字符串custodian。(?:_[a-z0-9]+)+非捕获组。_后跟字母数字的多个序列。$&nbsp;断言位置行尾。您可以在此处检查正确的匹配项。显然,您可以修改模式以signer在非捕获组中添加子字符串:^(?:custodian|signer)(?:_[a-z0-9]+)+$.

一只名叫tom的猫

我建议使用\d不是你的数字,这是我的代码试试看:-(?:custodian|signer)_[1-9]?[0-9]_(?:txt|ssn)_[1-9][0-9]?(_[1-9]?\d*)?我只是\d在模式的末尾添加了一个值,以在另一个匹配之前匹配所有结束数字。

MM们

如果您只对最后一位数字感兴趣,这个超级通用的正则表达式可以:(?:.+)_(\d+)如果您确实需要匹配整个字符串,则可以这样做:^(?:custodian|signer)_\d+_(?:txt|ssn)(?:_\d+)?_(\d+)$
随时随地看视频慕课网APP
我要回答