考虑一个如下所示的字符串:
RR1 S5 C92
这是用于外地邮件投递的乡村路线地址:Rural Route, Site, Compartment。每个字母后跟一个数字和一个空格。通常长一到三位数字,但您永远不知道它可能是多少位数字!如果用户懒惰,他们可能输入了零个、一个或多个空格。
问题: 您将使用什么正则表达式来确定给定字符串是否与此模式匹配?
它的用法是这样的:
string ruralPattern; //a regex pattern here
bool isRural = Regex.Match(someString, ruralPattern);
更新:感谢您的建议!性能和使用将在从 Web 服务调用的程序集中的静态方法中进行。根据此模式检查的字符串最多为 50 个字符。该方法将大约每 5 秒调用一次。关于保持静态的任何建议?非常感谢!
最佳答案
这应该有效:
^[Rr][Rr]\d+ *[Ss]\d+ *[Cc]\d+$
或根据其他评论
^[Rr][Rr][0-9]+ *[Ss][0-9]+ *[Cc][0-9]+$
这一切意味着什么:
- ^ - 字符串的开始
- [Rr] - 下一个字符必须是 R 或 r
- [Rr] - 下一个字符必须是 R 或 r
- \d+ 或 [0-9]+ - 下一部分必须是一位或多位数字
- (空格)* - 允许 0 个或更多空格
- [Ss] - 下一个字符必须是 S 或 s
- \d+ 或 [0-9]+ - 下一部分必须是一位或多位数字
- (空格)* - 允许 0 个或更多空格
- [Cc] - 下一个字符必须是 C 或 c
- \d+ 或 [0-9]+ - 下一部分必须是一位或多位数字
- $ - 字符串结尾
可能有更优雅的解决方案,但这很容易阅读。
编辑:已更新以包含一些评论的输入
关于C#:判断字符串是否是这种模式;可能的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1337820/