C# 正则表达式->;只有字母和以点结尾
我正在尝试选择所有仅包含字母或仅包含字母并以点结尾的标记 有效单词示例:C# 正则表达式->;只有字母和以点结尾,c#,regex,C#,Regex,我正在尝试选择所有仅包含字母或仅包含字母并以点结尾的标记 有效单词示例:“abc”,“abc.” 无效的“a.b”“a2” 我试过这个 string[] tokens = text.Split(' '); var words = from token in tokens where Regex.IsMatch(token,"^[a-zA-Z]+.?$") select token; ^[a-zA-Z]+-仅一次或多次使用字母,并以字母开头 ?$
“abc”,“abc.”
无效的
“a.b”“a2”
我试过这个
string[] tokens = text.Split(' ');
var words = from token in tokens
where Regex.IsMatch(token,"^[a-zA-Z]+.?$")
select token;
^[a-zA-Z]+
-仅一次或多次使用字母,并以字母开头
?$
=以0或1点结尾??不确定这一点在正则表达式中,未转义的
模式匹配任何字符(包括数字)。因此,您的正则表达式将不希望匹配标记,例如“a2”
您需要将点字符转义为\。
string[] tokens = text.Split(' ');
var words = from token in tokens
where Regex.IsMatch(token,@"^[a-zA-Z]+\.?$")
select token;
编辑:此外,您可以使用lookback和lookahead将拆分(“”)
逻辑合并到正则表达式中。这可能会提高效率,尽管它确实会稍微降低易读性
var words = Regex.Matches(text, @"(?<=\ |^)[a-zA-Z]+\.?(?=\ |$)")
.OfType<Match>()
.Select(m => m.Value);
var words=Regex.Matches(text,@)(?您需要转义
^[a-zA-Z]+\.?$
否则,
是一个特殊字符,它(几乎)匹配所有字符,而不仅仅是句点