C#正则表达式模式获取单词

本文关键字:单词 获取 模式 正则表达式 | 更新日期: 2023-09-27 18:11:30

我正试图找出从字符串中获取单词的模式。比如说我的字符串是:

string text = "HI/how.are.3.a.d.you.&/{}today 2z3";

我试图消除任何低于1个字母或数字的内容,但它不起作用:

Regex.Split(s, @"'b'w{1,1}'b");

我也试过这个:

Regex.Splits(text, @"'W+"); 

但它输出:

"嗨,你今天怎么样?">

我只想得到所有的单词,这样我的最后一个字符串是:

"嗨,你今天怎么样?">

C#正则表达式模式获取单词

要获取所有长度至少为2个字符的单词,可以使用以下模式:'b[a-zA-Z]{2,}'b

string text = "HI/how.are.3.a.d.you.&/{}today 2z3";
var matches = Regex.Matches(text, @"'b[a-zA-Z]{2,}'b");
string result = String.Join(" ", matches.Cast<Match>().Select(m => m.Value));
Console.WriteLine(result);

正如其他人在评论中指出的那样,"A"answers"I"是有效的词语。如果你决定匹配那些,你可以使用这个模式:

var matches = Regex.Matches(text, @"'b(?:[a-z]{2,}|[ai])'b",
                            RegexOptions.IgnoreCase);

在这两种模式中,我都使用了'b来匹配单词边界。如果您有诸如"1abc2"之类的输入,则不会匹配"abc"。如果希望它匹配,则删除'b元字符。从第一种模式开始这样做很简单。第二种模式将变为[a-z]{2,}|[ai]