查找一个单词的多次出现并使用 c-sharp 打印出该单词所在的整行

Posted

技术标签:

【中文标题】查找一个单词的多次出现并使用 c-sharp 打印出该单词所在的整行【英文标题】:Finding multiple occurrences of a word and printing out the entire line in which the word exists using c-sharp 【发布时间】:2021-04-18 09:08:27 【问题描述】:

嘿,伙计们,这是我一段时间以来一直想做的事情...... 所以我有一个在线文本文件,可以通过这样的链接访问https://example.com/myfile.txt 文本文件包含几句,这里有几句

This is a sentence
sentences are a combination of multiple words
we cannot imagine a world without sentences
words together form a sentence
here's a sentence orange is a fruit and I love it!
how's the day today?

好的,这是文本文件中的所有随机句子,所以现在如果我在输入 (string input) 中输入单词“单词”,我希望它打印出包含输入的所有行,这是一个示例

sentences are a combination of multiple words
words together form a sentence

【问题讨论】:

这是一个陈述,而不是一个问题。其中哪一部分给您带来了问题? 我在做这件事时遇到了麻烦,我不知道如何处理它,现在我有了清晰的工作代码来学习和理解,感谢 Poul Bak 【参考方案1】:

这是使用Regex 的明显案例。

using System.Text.RegularExpression;

string text = @"This is a sentence
sentences are a combination of multiple words
we cannot imagine a world without sentences
words together form a sentence
here's a sentence orange is a fruit and I love it!
how's the day today?";

string input = "words";
Regex regex = new Regex(@"^.*" + input + @".*$", RegexOptions.Multiline);
foreach (Match match in regex.Matches(text))

    Console.WriteLine(match.value);

解释: @"^.*" + input + @".*$", RegexOptions.Multiline

^.* 从行首匹配零个或多个字符

input匹配input字符串中的字符串

.*$ 匹配行尾的零个或多个字符

RegexOptions.Multiline 使^$ 匹配行的开头和结尾(通常它们匹配整个文本的开头和结尾)。

【讨论】:

非常感谢你的朋友,真的很期待一个好的解决方案,你终于给了我一个! 谢谢,伙计,它解决了我的问题,我很想请你喝杯咖啡 input 需要清理。它可以包含任何正则表达式字符。使用Regex.Escape(input) @PoulBak 是的,你想捕获整行,我一开始没明白 喂,对不起,我不是故意的,是我哥,对不起!【参考方案2】:

所以,只是为了好玩,您可以使用这些函数(它们按照您的要求执行,第二个函数允许您传递 URI,以便它从网址下载文本文件并继续搜索.

public static global::System.Collections.Generic.List<string> SearchFor(string[] Lines, string Term)

    global::System.Collections.Generic.List<string> r = new global::System.Collections.Generic.List<string>(Lines.Length);
    foreach (string l in Lines)  if (l.Contains(Term))  r.Add(l.Trim());  
    r.TrimExcess();
    return r;


public static global::System.Collections.Generic.List<string> SearchFor(string Text, string Term, bool TextIsUri = false)

    if (TextIsUri)  using (global::System.Net.WebClient w = new global::System.Net.WebClient())  Text = w.DownloadString(new global::System.Uri(Text));  
    return SearchFor(Text.Split(new char[]  '\n' , global::System.StringSplitOptions.RemoveEmptyEntries), Term);

当然,您还可以提供一些安全措施,例如测试字符串是否为空等,但我没有使用它,因此您可以查看最简单的代码并对其进行改进。

【讨论】:

不下载,只读,所以每次程序需要检查网络需要可用的东西时,如果没有它就不会工作 也没有问题,这只是一个替代方案,但如果你调用 "SearchFor("example.com/mytext.txt", "word", true)" 将访问网络,获取内存中的文件并应用过滤器,如果调用 "SearchFor("word bla, of bla bla word word", "word", false)" 它将直接过滤文本,而不是从任何地方获取它,使用 "Text" 参数作为要过滤的内容(也可以轻松更改它以从文件路径获取)。

以上是关于查找一个单词的多次出现并使用 c-sharp 打印出该单词所在的整行的主要内容,如果未能解决你的问题,请参考以下文章

在 HTML 页面中快速查找单词的算法

python第八题 查找敏感单词

想要在单行 Python 中多次打印 [重复]

sed 用多次出现的单词替换单词分隔符

查找文件中所有出现的字符串并在 Perl 中打印其行号

编写一个字谜查找器(来自 txt 文件中的单词列表)[重复]