【问题标题】:Substring, Replace, finding the next word etc in C#C# 中的子字符串、替换、查找下一个单词等
【发布时间】:2011-04-05 05:18:53
【问题描述】:

这似乎很棘手,我偶然发现了最后一个障碍。我尝试了不同的逻辑,但非常有效。所以我不提供我的代码。但我会发布我需要的输出。我想这是一个逻辑问题,尽管我确信我确实需要知道比.Substring().Replace() 更多的方法。

输入是一个字符串。并且输出是输入字符串的更改形式。这就是我想要的。

输入:“快乐” 输出:“快乐”

输入:“他是个骗子” 输出:“他是个骗子”

输入:“he c h e a t e d me” 输出:“he c h e a...t e d me”

输入:“这是我的 p a r r o t” 输出:“这是我的 p a...r r o t”

在我的程序中,有时字符串中的几个特定单词可以用空格分隔(鹦鹉,在上面的例子中作弊)。我想要发生的是

      .Replace("a ", "a...");

每当单词中用空格分隔的单词中有“a”时(p a r r o t, c h e a t e d),我希望三个点跟随在“a”后面。我能做到。使我的问题更加复杂的是“a”也是英语中用来表示“one”(芒果、苹果等)的常用词。我不希望程序在这样的“a”之后添加三个点。下面是一个例子。

输入:“m a n g o is a fruit” 输出:“m a...n g o is a fruit”

如何做到这一点?如果它提供我想要的输出,任何逻辑都可以。我希望我能把我的要求说清楚。如果我错过了什么,请询问。 谢谢

【问题讨论】:

  • 如果我是你,我会阅读解析器。如果你有这样的规则,你就离开了简单的文本操作领域。你需要将每个组件变成一个token,并在逻辑上确定token的哪些组合产生什么输出。
  • 我不知道什么是解析和什么是令牌。我只知道 C# 中的 .Substring 和 .Replace 方法。可以提供代码吗?
  • 我很想知道为什么你想这样做?我很难想象这样的场景有什么意义?
  • @Mark,哈哈。是的,这确实是一个奇怪的案例。我在我的程序中使用 espeak 文本到语音引擎,我所做的就是从后台运行命令行作为一个单独的进程。因此,在拼写工具中,我希望应用程序一个一个地指示拼写 - 一个字母一个字母。因此,如果我输入“y e l l o w”,它会读取每个字母 y、e、l、l、o 和 w。但奇怪的是,如果有像“c h e a t e r”这样的字母“a”,字母“a”被读得太快以至于根本看不清楚。所以我想在阅读“a”后延迟一下。 “a ...”可以解决问题。希望回答:P

标签: .net string replace substring


【解决方案1】:

这将适用于您提到的情况...

string input = "once a c h e a t e r always a cheater";
string output = Regex.Replace(input, @"(?<=\b\w )a (?=\w\b)", "a...");
Console.WriteLine(output); // once a c h e a...t e r always a cheater

它检查周围的“单词”是一个字母。

【讨论】:

  • 谢谢,这行得通。我猜想我可以通过使用正则表达式轻松做到这一点。我不是专家。谢谢。我用这个:使用 System.Text.RegularExpressions;
  • @Mark,如果单词以“a”开头,此方法不会插入“...”。假设输入是“thin a i r”,输出是一样的。不是“thin a...i r”.. 可以做什么?
  • @nawful:是的。只需将正则表达式更改为@"a (?=\w\b)"。您还没有明确定义您希望 ...s 出现的时间和地点,因此很难给您一个明确的答案。例如,“a c h e a t e r”。第一个“a”是“aheater”的一部分还是它自己的词?
  • @Mark:在“a c h e a t e r”中,我希望输出是“a c h e a...t e r”。但我知道考虑到您使用的逻辑,这很困难。不过没关系。我更喜欢用你现在的逻辑得到输出“a...c h e a...t e r”而不是“a c h e a...t e r”(考虑到我有很多以“a”开头的单词)。虽然你的新代码并没有完全符合我的要求,但这比以前的工作做得更好。所以让我编辑它。非常感谢.. :)
  • 不客气。如果您想要比这更好的结果,则必须使用字典,否则就无法知道在哪里拆分它。
【解决方案2】:

我不确定,但你可以试试, 查找子字符串 'a',获取下一个字符串,如果在出现 thr 之后是一个类似于字符空间字符空间的字符串,则将 a 替换为 a...

【讨论】:

  • 是的,我知道。但我的问题是,即使对于我们用英语使用的普通“a”,它也是如此。那不应该发生。我在帖子结束时提到了那部分。请阅读。如果您有想法,您可以发布代码本身吗?
  • 但是在正常出现的情况下,a 之后会有一个单词,您可以检查单词,例如空格 someother character space someother character space 然后替换您需要创建的 a.for一个数组,在第一个位置,空格第一个位置,字符第二个位置,空格第三个位置和字符第四个位置创建一个数组,然后停止向前搜索并检查此模式是否遵循将 a 替换为 a...
  • 这就是核心逻辑,你是对的。这就是我尝试过的。但我在最后一关绊倒了。如果您能提供代码 sn-p 本身,我将不胜感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-17
相关资源
最近更新 更多