Regex 如何为冒号或换行符分隔的单词编写正则表达式&;标签

Regex 如何为冒号或换行符分隔的单词编写正则表达式&;标签,regex,Regex,\w+:\w+\s*\w*\n-这是一个正则表达式,用于组合由新行分隔的键值对(用冒号分隔) 以上是两个匹配项。。。 abc:sss def:ghj 但是这个正则表达式只允许单词中第一次出现空格/制表符 有人能告诉我如何避免选项卡/空格的“全部”出现吗 编辑: 如果我们有上面这样的文本-如果我使用正则表达式,我需要得到2个匹配项 体育:体育文本 食物:FoodText 我可以想出这个正则表达式: ^(\w+):|(.+) 组1将捕获“密钥”,而组2将捕获内容。我无法让第2组存储多行的所有内容

\w+:\w+\s*\w*\n-这是一个正则表达式,用于组合由新行分隔的键值对(用冒号分隔)

以上是两个匹配项。。。 abc:sss def:ghj

但是这个正则表达式只允许单词中第一次出现空格/制表符

有人能告诉我如何避免选项卡/空格的“全部”出现吗

编辑: 如果我们有上面这样的文本-如果我使用正则表达式,我需要得到2个匹配项

  • 体育:体育文本
  • 食物:FoodText

  • 我可以想出这个正则表达式:

    ^(\w+):|(.+)
    

    组1将捕获“密钥”,而组2将捕获内容。我无法让第2组存储多行的所有内容,因此如果您有多行,您将有多个第2组。查看以下匹配信息:

    匹配信息

    MATCH 1
        Group 1:    [0-6]   `sports`
    MATCH 2
        Group 2:    [7-63]  ` soccer, tennis   I would like to play all kind of spots`
    MATCH 3
        Group 2:    [64-99] `        the spots desc continues...`
    MATCH 4
        Group 1:    [100-104]   `Food`
    MATCH 5
        Group 2:    [105-150]   ` Indian, Italian, Mexican - I love all three.`
    

    假设匹配中所有嵌入的换行符后面紧跟着一个制表符(请注意下面模式中的\n\t),则此代码应该完全有效

    //匹配表单“Word:带有内嵌换行符/制表符组合的某些文本”的模式
    常量字符串模式=@“^\w+:(.|(\n\t))*”;
    //获取匹配的项目
    MatchCollection matches=Regex.matches(输入、模式、RegexOptions.Multiline);
    //写出匹配项
    for(int i=0;i
    对于输入字符串,此代码的输出如下所示:

    -----MATCH----- sports: soccer, tennis I would like to play all kind of spots the spots desc continues... -----MATCH----- Food: Indian, Italian, Mexican - I love all three. -----匹配----- 运动:足球、网球我想参加各种各样的比赛 斑点描述继续。。。 -----匹配----- 食物:印度菜、意大利菜、墨西哥菜——我都喜欢。
    确保不要忘记
    RegexOptions.Multiline
    选项;它使
    ^
    作为行的开始,而不仅仅是整个字符串的开始。

    我不明白你的问题,你想做什么?给出一个示例输入和您期望的输出,我看不出您的regexp将如何匹配它。regexp在
    之后有一个所需的空格,但您的匹配项没有该空格。顺便说一句,您不需要转义
    。请查看编辑。我需要用新行分隔文本,在起始字符前没有空格。@相对论已修复,现在请查看
    //Pattern to match the form "Word: some text with embedded newline/tab combos"
    const string pattern = @"^\w+:(.|(\n\t))*";
    
    //Get the matching items
    MatchCollection matches = Regex.Matches(input, pattern, RegexOptions.Multiline);
    
    //Write out the matches
    for (int i = 0; i < matches.Count; i++)
    {
        Console.WriteLine("-----MATCH-----");
        Console.WriteLine(matches[i].Value);
        Console.WriteLine();
    }
    
    -----MATCH----- sports: soccer, tennis I would like to play all kind of spots the spots desc continues... -----MATCH----- Food: Indian, Italian, Mexican - I love all three.