如何在 C# 中构造 REGEX
How to structure REGEX in C#
我目前有一个正则表达式来检查美国州的拼写是否正确
var r = new Regex(string.Format(@"\b(?:{0})\b", pattern), RegexOptions.IgnoreCase)
pattern 是包含美国所有州的竖线分隔字符串。
它今天按预期工作,直到其中一个州被拼写为 "Florida.." 我希望它能识别出句号这一事实。
我发现这个正则表达式只能匹配字母。
^[a-zA-Z]+
如何将它与我当前的正则表达式结合起来,或者这不可能吗?
我尝试了一些变体,但没有用
var r = new Regex(string.Format(@"\b^[a-zA-Z]+(?:{0})\b", pattern), RegexOptions.IgnoreCase);
编辑:Florida..
在我的输入字符串中。我的模式字符串根本没有改变。抱歉没说清楚。
您似乎需要字符串开头 (^
) 和字符串结尾 ($
) 锚点:
var r = new Regex(string.Format(@"^(?:{0})$", pattern), RegexOptions.IgnoreCase);
上面的正则表达式将匹配任何仅包含州名称的字符串。
您应该替换 pattern
变量以转义正则表达式特殊字符。其中之一是 .
字符。与 pattern.Replace(".", @"\.")
类似,但包含所有特殊字符。
我相信您不能将两种模式合并为一个,因此您必须执行两种不同的正则表达式操作,一种是将状态拆分为一个列表,另一种是用于验证其中的每个项目。
我宁愿去"simpler",比如
var states = input.Split('|').Select(s => new string(s.Where(char.IsLetter).ToArray()))
.Where(s => !string.IsNullOrWhiteSpace(s));
基本上不要在这里使用正则表达式。
List<string> values = new List<string>() {"florida", etc.};
string input;
//is input in values, ignore case and look for any value that includes the input value
bool correct = values.Any(a =>
input.IndexOf(a, StringComparison.CurrentCultureIgnoreCase) >= 0);
这将比基于正则表达式的选项更有效。这应该匹配 florida
、Florida
和 Florida...
等
不要直接搜索字符,告诉正则表达式使用所有未针对特定字符的所有字符,例如[^\|.]+
。它使用集合 [ ]
和 not ^
指示符表示消耗任何不是文字 |
或 .
的东西。因此它只消耗所需的文本。比如on
Colorado|Florida..|New Mexico
returns Colorado
Florida
和 New Mexico
3 场比赛
我目前有一个正则表达式来检查美国州的拼写是否正确
var r = new Regex(string.Format(@"\b(?:{0})\b", pattern), RegexOptions.IgnoreCase)
pattern 是包含美国所有州的竖线分隔字符串。
它今天按预期工作,直到其中一个州被拼写为 "Florida.." 我希望它能识别出句号这一事实。
我发现这个正则表达式只能匹配字母。
^[a-zA-Z]+
如何将它与我当前的正则表达式结合起来,或者这不可能吗?
我尝试了一些变体,但没有用
var r = new Regex(string.Format(@"\b^[a-zA-Z]+(?:{0})\b", pattern), RegexOptions.IgnoreCase);
编辑:Florida..
在我的输入字符串中。我的模式字符串根本没有改变。抱歉没说清楚。
您似乎需要字符串开头 (^
) 和字符串结尾 ($
) 锚点:
var r = new Regex(string.Format(@"^(?:{0})$", pattern), RegexOptions.IgnoreCase);
上面的正则表达式将匹配任何仅包含州名称的字符串。
您应该替换 pattern
变量以转义正则表达式特殊字符。其中之一是 .
字符。与 pattern.Replace(".", @"\.")
类似,但包含所有特殊字符。
我相信您不能将两种模式合并为一个,因此您必须执行两种不同的正则表达式操作,一种是将状态拆分为一个列表,另一种是用于验证其中的每个项目。
我宁愿去"simpler",比如
var states = input.Split('|').Select(s => new string(s.Where(char.IsLetter).ToArray()))
.Where(s => !string.IsNullOrWhiteSpace(s));
基本上不要在这里使用正则表达式。
List<string> values = new List<string>() {"florida", etc.};
string input;
//is input in values, ignore case and look for any value that includes the input value
bool correct = values.Any(a =>
input.IndexOf(a, StringComparison.CurrentCultureIgnoreCase) >= 0);
这将比基于正则表达式的选项更有效。这应该匹配 florida
、Florida
和 Florida...
等
不要直接搜索字符,告诉正则表达式使用所有未针对特定字符的所有字符,例如[^\|.]+
。它使用集合 [ ]
和 not ^
指示符表示消耗任何不是文字 |
或 .
的东西。因此它只消耗所需的文本。比如on
Colorado|Florida..|New Mexico
returns Colorado
Florida
和 New Mexico