Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ:选择字符串中任何单词以某个字符开头的行_Linq - Fatal编程技术网

LINQ:选择字符串中任何单词以某个字符开头的行

LINQ:选择字符串中任何单词以某个字符开头的行,linq,Linq,我希望从表中提取列(字符串)中至少有一个以指定字符开头的单词的所有行。 例如: 如果指定的字符是T->I,我将提取所有3行 如果指定的字符是S->I,则只提取第二列 请帮助我假设您的意思是“以空格分隔的字符序列,或从空格开始或从空格到结尾”是“word”,那么您可以在分隔符上拆分并测试它们是否匹配: var src = new[] { "this is the first row", "this is th second row", "this is the third

我希望从表中提取列(字符串)中至少有一个以指定字符开头的单词的所有行。 例如:

如果指定的字符是T->I,我将提取所有3行 如果指定的字符是S->I,则只提取第二列

请帮助我

假设您的意思是“以空格分隔的字符序列,或从空格开始或从空格到结尾”是“word”,那么您可以在分隔符上拆分并测试它们是否匹配:

var src = new[] {
    "this is the first row",
    "this is th second row",
    "this is the third row"
};

var findChar = 'S';
var lowerFindChar = findChar.ToLower();
var matches = src.Where(s => s.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Any(w => w.ToLower()[0] == lowerFindChar));
LINQ
可枚举。任何
方法,因此您可以将每个字符串拆分为一个单词序列,并查看是否有任何单词以所需字母开头,以补偿大小写。

假设您指的是“以空格分隔的字符序列,或以空格开头或空格结尾”的“单词”,然后,您可以拆分分隔符并测试它们是否匹配:

var src = new[] {
    "this is the first row",
    "this is th second row",
    "this is the third row"
};

var findChar = 'S';
var lowerFindChar = findChar.ToLower();
var matches = src.Where(s => s.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Any(w => w.ToLower()[0] == lowerFindChar));
LINQ
可枚举。任何
方法,因此您可以将每个字符串拆分为一个单词序列,并查看是否有任何单词以所需字母开头,以补偿大小写。

尝试以下操作:

rows.Where(r => Regex.IsMatch(r, " [Tt]"))
您可以将
Tt
替换为
Ss
(假设您想要大写或小写)。

尝试以下方法:

rows.Where(r => Regex.IsMatch(r, " [Tt]"))

您可以将
Tt
替换为
Ss
(假设您想要大写或小写)。

问题当然是,“单词”是什么

根据您的定义,上面句子中的字符序列“单词”是否为单词?它不是以空格开始的,甚至不是空白

一个词的定义可以是:

定义wordCharacter:类似于A-Z,A-Z的东西。
定义单词: -字符串开头的单词字符的非空序列,后跟非单词字符 -或字符串末尾的非空字字符序列,前面有一个非字字符 -字符串中后跟非单词字符的任何非空单词字符序列 定义单词的开头:单词的第一个字符

字符串:“一些奇怪的字符:'A',9,ll,B9 C$X? -单词:一些,奇怪的字符,一个 -不是文字:9,ll,B9,C$X

因此,首先必须精确地指定单词的含义,然后才能定义函数

我将把它作为
IEnumerable
的扩展方法编写。用法将类似于LINQ。请参阅

bool-IsWordCharacter(charc){…TODO:实现您对单词字符的定义}
静态IEnumerable拆分为文字(此字符串文本)
{
//TODO:文本为空时异常
如果(text.Length==0)返回
int startIndex=0;
while(startIndex!=text.Length)
{//不在字符串末尾。查找下一个单词的开头:
while(startIndex
现在,您已经有了将任何字符串拆分为单词定义的过程,您的查询将变得简单:

IEnumerabl<string> texts = ...
char specifiedChar = 'T';

// keep only those texts that have at least one word that starts with specifiedChar:
var textsWithWordThatStartsWithSpecifiedChar = texts
    // split the text into words
    // keep only the words that start with specifiedChar
    // if there is such a word: keep the text
    .Where(text => text.SplitIntoWords()
                   .Where(word => word.Length > 0 && word[0] == specifiedChar)
                   .Any());
IEnumerabl text=。。。
char specifiedChar='T';
//仅保留至少有一个以specifiedChar开头的单词的文本:
var textswithwordthattstartswithspecifiedchar=文本
//把课文分成几个字
//只保留以specifiedChar开头的单词
//如果有这样一个词:保留文本
.Where(text=>text.SplitIntoWords()
.Where(word=>word.Length>0&&word[0]==specifiedChar)
.Any());

问题当然是,“单词”是什么

根据您的定义,上面句子中的字符序列“word”是一个单词吗?它不是以空格开头的,甚至不是空格

一个词的定义可以是:

定义wordCharacter:类似于A-Z,A-Z的东西。
定义单词: -字符串开头的单词字符的非空序列,后跟非单词字符 -或字符串末尾的非空字字符序列,前面有一个非字字符 -字符串中后跟非单词字符的任何非空单词字符序列 定义单词的开头:单词的第一个字符

字符串:“一些奇怪的字符:'A',9,ll,B9 C$X? -单词:一些,奇怪的字符,一个 -不是文字:9,ll,B9,C$X

因此,首先必须精确地指定单词的含义,然后才能定义函数

我将把它写成
IEnumerable
的扩展方法。用法将类似于LINQ。看

bool-IsWordCharacter(charc){…TODO:实现您对单词字符的定义}
静态IEnumerable拆分为文字(此字符串文本)
{
//TODO:文本为空时异常
如果(text.Length==0)返回
int startIndex=0;
while(startIndex!=text.Length)
{//不在字符串末尾。查找下一个单词的开头:
while(startIndexvar yourChar = "s";

var texts = new List<string> {
    "this is the first row",
    "this is th second row",
    "this is the third row"
};

var result = texts.Where(p => p.StartsWith(yourChar) || p.Contains(" " + yourChar));
var result = texts.Where(p => (" " + p).Contains(" " + yourChar));