【问题标题】:Substring Specific Word Containing Special Character between them子字符串之间包含特殊字符的特定单词
【发布时间】:2016-05-05 10:07:38
【问题描述】:

我有以下字符串

string test = "viv-ek is a good boy.Mah - esh is Cra - zy.";

我想从该字符串中获取{"Vivek","Mahesh","Crazy"} 单词

有些单词之间只有"-",有些单词之间有" - "

【问题讨论】:

  • 如果那些 ("-" & "-") 是唯一可能的情况并且不会干扰其他部分,string.Replacestring.Split 对你来说是很好的工具...... :)
  • 试试test.Replace('-', '').Replace(' - ', '')
  • 您的具体问题是什么?每个人都发布了关于替换字符串中字符“-”的答案。如果这不是必需的答案,请再解释一下您的问题。
  • 你是对的 lan 但我必须先在字典中检查这些单词然后我才会决定是否替换

标签: c# regex string substring match


【解决方案1】:

您可以使用以下正则表达式找到您的单词:

\b\w+(?:\s-\s|-)\w+\b

并将匹配字符串的结果替换为(?:\s-\s|-) 与空字符串''

【讨论】:

  • 感谢@Kasramvd 的快速回复
【解决方案2】:
\b\w+\s*-\s*\w+\b

你可以试试这个。查看演示。

https://regex101.com/r/cZ0sD2/14

【讨论】:

  • \s*-\s* 将匹配“-”等分隔符。
【解决方案3】:

这可能对你有用

string test = "viv-ek is a good boy.Mah - esh is Cra - zy.";
test = test.Replace(" -", "-").Replace("- ", "-").Replace(".", ". ");
//Or
//test = test.Replace(" - ", "-").Replace(".", ". ");
string[] allwords = test.Split(' ');
List<string> extractedWords=new List<string>();
foreach(string wrd in allwords)
{
    if(wrd.Contains("-"))
    {
        extractedWords.Add(wrd.Replace("-", ""));
    }
}

【讨论】:

    【解决方案4】:

    如果您只想选择这些单词,请使用:

    string test = "viv-ek is a good boy.Mah - esh is Cra - zy.";
    var words = 
        Regex
            .Matches(test, @"(?<part>\w+)(\s*-\s*(?<part>\w+))+\b")
            .Cast<Match>()
            .Select(
                x => string.Join(
                    string.Empty, 
                    x.Groups["part"].Captures.Cast<Capture>().SelectMany(capture => capture.Value)))
            .ToList();
    

    words 是一个包含“vivek”、“Mahesh”、“Crazy”的列表。

    DEMO

    替换单词的工作方式相同:

    var replacingValues = new Dictionary<string, string> { { "Crazy", "XXX" } };
    var test = "viv-ek is a good boy.Mah - esh is Cra - zy.";
    var replacedTest =
        Regex.Replace(
            test,
            @"\b(?<part>\w+)(\s*-\s*(?<part>\w+))+\b",
            match =>
                {
                    var word = string.Join(string.Empty, match.Groups["part"].Captures.Cast<Capture>().SelectMany(capture => capture.Value));
                    string replacingValue;
                    return replacingValues.TryGetValue(word, out replacingValue) ? replacingValue : match.Value;
                });
    

    replacedTest包含viv-ek is a good boy.Mah - esh is XXX.

    DEMO

    【讨论】:

    • 感谢@Vera ring 真的很有帮助
    • @dhiraj 我添加了一个简单的示例来替换使用字典来检查是否执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 2020-12-25
    • 2023-03-24
    • 2019-03-20
    • 1970-01-01
    • 2014-10-27
    相关资源
    最近更新 更多