从中提取字符串

时间:2014-09-18 04:39:15

标签: c# regex vb.net

我有以下字符串

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之间有一个空格,这是第1页。有时第一个数字是  像2129那样省略了。文本和下一个数字之间总是有一个空格,所以在它之间有一个空格。这是一个Page1和6754001和  有时可以有两个空格。 我只需要提取这些行 这些行总是在空格后开始,因此它可以是

29 This is page1

它们总是被空间所取代,有时是一个空间,有时是两个空格。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以尝试使用以下正则表达式来获取文本,该文本在开头有一个可选数字,后跟一个或多个空格和一个数字。

<强>正则表达式:

^(?:\d+)?\s*(.*?)\s+\d.*

替换字符串:

$1

DEMO

通过字符串替换,

<强>代码

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

IDEONE

通过Matches方法。

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);

IDEONE

答案 1 :(得分:0)

^\d*.*?\s+|(?<=\s)\d{2,}.*(?=\s|$)

试试这个。这将符合您的最新要求。参见演示

http://regex101.com/r/gG5fF6/4