gpt4 book ai didi

c# - 正则表达式 -> 只有字母并以点结尾

转载 作者:行者123 更新时间:2023-11-30 14:37:27 24 4
gpt4 key购买 nike

我正在尝试选择所有仅包含字母或仅包含字母并以点结尾的标记。

有效单词示例:"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 点结尾 ??对此不确定

最佳答案

在正则表达式中,未转义的 . pattern 匹配任何字符(包括数字)。因此,您的正则表达式会意外匹配 "a2" 等标记。 .

您需要将点字符转义为 \. .

string[] tokens = text.Split(' ');
var words = from token in tokens
where Regex.IsMatch(token,@"^[a-zA-Z]+\.?$")
select token;

编辑:此外,您可以合并您的 Split(' ')通过使用 lookbehind 和 lookahead 将逻辑添加到你的正则表达式中。这可能会提高效率,尽管它确实会降低易读性。

var words = Regex.Matches(text, @"(?<=\ |^)[a-zA-Z]+\.?(?=\ |$)")
.OfType<Match>()
.Select(m => m.Value);
  • (?<=\ |^) lookbehind 意味着匹配之前必须有空格或字符串开头。
  • (?=\ |$)先行意味着匹配后必须有空格或字符串结尾。

关于c# - 正则表达式 -> 只有字母并以点结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9235235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com