我有以下字符串
29 This is a Page1 6754001 1,2,3,4
6755 This is a Page2 56-0 7654564
This is a Page3 67543-986xx 8 12
This is (Page5)& Container 876-0 6 8xp
从上面,我需要提取下面的文字
This is a Page1
This is a Page2
This is a Page3
This is (Page5)& Container
第一个数字和文本之间总是有一个空格,所以2129和This is page1之间有一个空格。有时第一个数字被省略,就像2129不见了。文本和下一个数字之间总是有一个空格,所以在This is a Page1和6754001之间有一个空格,有时可能有两个空格。我只需要提取这些线这些线总是从空格开始,所以它可以
29 This is page1
它们的后面总是有一个空格,有时是一个空格,有时是两个空格。
任何帮助都将不胜感激。
您可以尝试下面的正则表达式来获取文本,该文本在开始时前面有一个可选的数字,后面有一个或多个空格和一个数字。
正则表达式:
^(?:\d+)?\s*(.*?)\s+\d.*
替换字符串:
$1
演示
通过字符串替换,
代码:
string str = @"29 This is a Page1 6754001 1,2,3,4
6755 This is a Page2 56-0 7654564
This is a Page3 67543-986xx 8 12
This is (Page5)& Container 876-0 6 8xp";
string result = Regex.Replace(str, @"(?m)^(?:\d+)?\s*(.*?)\s+\d.*", "$1");
Console.WriteLine(result);
Console.ReadLine();
输出:
This is a Page1
This is a Page2
This is a Page3
This is (Page5)& Container
表意文字
或者
通过匹配
方法。
string str = @"29 This is a Page1 6754001 1,2,3,4
6755 This is a Page2 56-0 7654564
This is a Page3 67543-986xx 8 12
This is (Page5)& Container 876-0 6 8xp";
Regex rgx = new Regex(@"(?m)^(?:\d+)?\s*(.*?)\s+\d.*");
foreach (Match m in rgx.Matches(str))
Console.WriteLine(m.Groups[1].Value);
表意文字
^\d*.*?\s+|(?<=\s)\d{2,}.*(?=\s|$)
试试这个。这将适用于您的最新要求。见演示
http://regex101.com/r/gG5fF6/4