搜索以纯文本中的数字和点为前缀的连续列表元素

时间:2011-09-22 13:24:02

标签: regex parsing text-parsing abstract-syntax-tree

文字如下:

"Beginning. 1. The container is 1.5 meters long 2. It can hold up to 2lt of fluid. 3. It 4 holes."

每个列表元素的末尾可能没有点。

如何将此文本拆分为如下所示的列表?

"Beginning."
"The container is 1.5 meters long"
"It can hold up to 2lt of fluid."
"It has 4 holes."

换句话说,我需要匹配(\ d +)\。这样所有(\ d +)都是连续的整数,这样我就可以在它们之间拆分和修剪文本。正则表达式有可能吗?我有多远进入计算机科学领域?

2 个答案:

答案 0 :(得分:1)

使用

\d+\.(?!\d)

作为分裂正则表达式,i。即用PHP

$result = preg_split('/\d+\.(?!\d)/', $subject);

否定前瞻(?!\d)确保匹配点后不会跟随数字。

或者强制使用空格 - 如果这是一个选项:

$result = preg_split('/\s+\d+\.\s+/', $subject);

答案 1 :(得分:1)

这是有效的c#代码:

string s = "Beginning. 1. The container is 1.5 meters long 2. It can hold up to 2lt of fluid. 3. It has 4 holes.";
string[] res = Regex.Split(s, @"\s*\d+\.\s+");

foreach (var r in res)
{
    Console.WriteLine(r);
}

Console.ReadLine();

我在\s*\d+\.\s+上拆分,这意味着可选的空格,后跟至少一个数字,然后是一个点,然后是至少一个空格。