【问题标题】:C# - How do find a string within a string even if it spans across whitespace?C# - 如何在字符串中找到一个字符串,即使它跨越空格?
【发布时间】:2011-02-02 09:32:55
【问题描述】:

我希望能够在字符串中找到并突出显示一个字符串,但我不想删除空格。

所以如果我的原始字符串是:

有12只猴子

我想找到 '12 mon' 并突出显示那些以 :

结尾的字符

有12 mon键

但如果我搜索“12mon”,我也想要相同的结果(这次没有空格)

这真的让我大吃一惊!我确信它可以用正则表达式来完成。

【问题讨论】:

  • 正则表达式如何知道在 "2" 和 "m" 之间插入空格?不能同时搜索“1 2mon”、12m on”和“12mon n”吗?

标签: c# regex string replace highlight


【解决方案1】:

康斯坦丁的回答没有考虑空间是否在其他地方。因此,我会采用用户想要搜索的输入并在每个位置插入“\w*”,这样就可以找到任何可能的搜索。

var searchTerm = "eare1";
var input = "There are 12 monkeys";
var result = Regex.Replace(input, @"e\s*a\s*r\s*e\s*1", @"<font color='red'>$0</font>");

结果是:

Ther<font color='red'>e are 1</font>2 monkeys

【讨论】:

    【解决方案2】:

    使用* 指定空格是可选的并使用Regex 类的Replace 方法:

    var input = "There are 12 monkeys";
    
    var result = Regex.Replace(input, @"12\s*mon", @"<font color='red'>$0</font>");
    

    结果是:

    There are <font color='red'>12 mon</font>keys
    

    【讨论】:

    • 我已经删除了我的回复以支持这一点,这基本上是相同的答案。重复答案没有意义。
    【解决方案3】:

    已经够快了,这更简洁:只需搜索原始字符串和这个字符串即可:

    originalString.ToCharArray().Where(c => !Char.IsWhiteSpace(c));
    

    我想大部分处理时间都将花费在重新构建您的 HTML 字符串上,因此解析为 char 数组的成本应该不是主要问题。

    【讨论】:

    • +1。但是为什么不能用这个方法代替 newString = originalString.Replace(" ", "");
    【解决方案4】:

    你可以正则表达式 1\s?2\s?m\s?o\s?n\s?

    您需要编写一个函数来生成正则表达式,但这应该不会太难。请注意,当我创建正则表达式时,我没有使用包含实际空间...

    【讨论】:

    • 但也许你需要 '*' 量词而不是 '?'考虑多个空间。
    • 这就是我说“也许”的原因,但我应该明确提到这一点。
    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多