我正在寻找一个正则表达式从同一文本中提取两个数字(它们可以独立运行,无需一次性提取它们。
我正在使用雅虎管道。
原文:S $ 5,200 /月面议,1,475平方英尺/ 137平方米(内置) - 公寓,安顺路10号(D02)
需要提取数字:1,475 而且(但可以在单独的实例上提取) 需要提取数字:137
我从另一个论坛上非常有帮助的人那里获得了以下模式:
\ B(\ d +(\ d +)*)\ S +(平方英尺|平方米)
但是当我使用替换$ 1时,它会带回整个源文本而不仅仅是我想要的数字(即1,475或137,具体取决于我是否运行 \ b(\ d +(,\ d +))\ s +(sqft)或\ b(\ d +(,\ d +))\ s +(sqm)
我在做错了什么?答案 0 :(得分:2)
嗯,你可以通过迭代匹配并以这种方式得到结果来做到这一点。
但是如果你想使用替换方法,那么这可以工作:
^.*?(?<sqft>\d+(,\d+)*)\s?sqft.*?(?<sqm>\d+(,\d+)*)\s?sqm.*$
然后替换为:
${sqft}
${sqm}
这将在sqft或sqm数字中使用或不使用逗号。并且。*在开头,中间和结尾处强制它匹配整个字符串,以便替换文本消除除了你所追求的内容之外的所有内容。
答案 1 :(得分: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'。
这应该允许您的格式非常宽松(可选空格,千位和小数分隔符)。
答案 2 :(得分: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;
}
答案 3 :(得分:0)
您可能希望考虑this answer中讨论的情况,为数字制作正则表达式。