我有三个句子如下:
000000-00000 Date First text: something1 200000-00000 Time Second text: something2 234222-34332 struc Third text: somthing3
如何编写正则表达式以匹配(Date | Time | struc)和冒号(:),不包括(Date | Time | struc)?。
答案 0 :(得分:3)
我怀疑这就是你所追求的。正则表达式部分是:
new Regex(@"^\d{6}-\d{5} \w* ([^:]*): ")
这是一个简短但完整的测试程序:
using System;
using System.Text.RegularExpressions;
class Test
{
static void Main(string[] args)
{
Parse("000000-00000 Date First text: something1");
Parse("200000-00000 Time Second text: something2");
Parse("234222-34332 struc Third text: somthing3");
}
static readonly Regex Pattern = new Regex
(@"^\d{6}-\d{5} \w* ([^:]*): ");
static void Parse(string text)
{
Console.WriteLine("Input: {0}", text);
Match match = Pattern.Match(text);
if (!match.Success)
{
Console.WriteLine("No match!");
}
else
{
Console.WriteLine("Middle bit: {0}", match.Groups[1]);
}
}
}
请注意,这并不假设“Date”,“Time”“struc”是数字后面唯一可能的值,只是它们将由单词字符构成。它还假设您想要匹配整条线,而不仅仅是中间部分。如果这对你有帮助,很容易用其他组提取其他部分。
答案 1 :(得分:0)
以下表达式将捕获您想要进入命名组value
的内容,不包括Date
,Time
,struc
,以下空格以及值后面的冒号。
(?:Date|Time|struc) (?<value>[^:]*)
此表达式将包含冒号。
(?:Date|Time|struc) (?<value>[^:]*:)
答案 2 :(得分:0)
此:
^\d{6}-\d{5} \S+ ([^:]+)
匹配“第一文字”,“第二文字”和“第三文字”,而不明确提及(Date|Time|struc)
。比赛在第1组。
答案 3 :(得分:0)
如果你的例子是你希望输出为:
第一个文字 第二个文字 第三个文字
您可以使用正则表达式
(?<=(DATE|TIME|STRUC)\s)[^:]*
我无法想象你的例子看起来非常有用 - 看起来像之后的描述性文字意味着你真的希望一切都在行的末尾这将是:
(?i:(?<=(DATE|TIME|STRUC)\s).*)
[使用RegexBuddy检查 - 所以如果我正确地解释了你的问题,这可行]