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]+\.?$
否则,
是一个特殊字符,它(几乎)匹配所有字符,而不仅仅是句点