2

我正在寻找一个正则表达式来从同一文本中提取两个数字(它们可以独立运行,无需一次性提取它们。

我正在使用雅虎管道。

原文: S$ 5,200 / 月 Negotiable, 1,475 sqft / 137 sqm (built-in) - Apartment, 10 Anson Road (D02)

需要提取为数字:1,475 以及(但可以在单独的实例上提取)需要提取为数字:137

我从另一个论坛上非常有帮助的人那里得到了以下模式:

\b(\d+(,\d+)*)\s+(平方英尺|平方米)

但是当我用替换 $1 来使用它时,它会带回整个源文本,而不仅仅是我想要的数字(即 1,475 或 137,具体取决于我是否运行 \b(\d+(,\d+) )\s+ (平方英尺) 或 \b(\d+(,\d+) )\s+(平方米)

我究竟做错了什么?

4

4 回答 4

2

好吧,您可以通过迭代匹配并以这种方式获得结果来做到这一点。

但是如果你想使用 replace 方法,那么这可以工作:

^.*?(?<sqft>\d+(,\d+)*)\s?sqft.*?(?<sqm>\d+(,\d+)*)\s?sqm.*$

然后替换为:

${sqft}
${sqm}

这是在行动。

这将在 sqft 或 sqm 数字中使用或不使用逗号。开头、中间和结尾处的 .* 强制它匹配整个字符串,以便替换文本消除除您所追求的内容之外的所有内容。

于 2010-02-11T02:26:25.563 回答
0

由于您没有指定语言,这里有一些 Python:

import re

s = "$ 5,200 / month Negotiable, 1,475 sqft / 137 sqm (built-in) - Apartment, 10 Anson Road (D02)"
print re.search(r'\b([0-9.,]+) ?sqft ?/ ?([0-9.,]+) ?sqm', s).groups()
# prints ('1,475', '137')

在单词边界后搜索任何数字、逗号或句点,后跟可选空格和单词“sqft”,然后是可选空格、斜杠、可选空格空格,后跟任意数字、逗号或句点,一个可选的空间,单词'sqm'。

这应该允许您的格式非常松散(可选空格、千位和小数分隔符)。

于 2010-02-11T02:23:54.133 回答
0

在 perl 中,我会写如下内容:

if ($line ~= m/\b([0-9.,]+) sqft/)
{
  $sqft = $1;
}
else
{
  $sqft = undef;
}

if ($line ~= m/\b([0-9.,]+) sqm/)
{
  $sqm = $1;
}
else
{
  $sqm = undef;
}
于 2010-02-11T02:31:44.007 回答
0

您可能希望在为数字制作正则表达式时考虑此答案中讨论的情况。

于 2010-11-23T14:57:12.047 回答