2

同じテキストから 2 つの数値を抽出する正規表現を探しています (それらは個別に実行できます。一度に両方を抽出する必要はありません。

yahooパイプを使用しています。

ソース テキスト: S$ 5,200 / 月 応相談, 1,475 平方フィート / 137 平方メートル (ビルトイン) - アパート, 10 Anson Road (D02)

数値として抽出する必要があります: 1,475 および (ただし、別のインスタンスで抽出できます) 数値として抽出する必要があります: 137

別のフォーラムで非常に役立つ人から次のパターンを取得しました。

\b(\d+(,\d+)*)\s+(平方フィート|平方メートル)

しかし、$1 を置き換えて使用すると、必要な数字だけでなく、ソース テキスト全体が返されます (つまり、\b(\d+(,\d+) を実行するかどうかに応じて 1,475 または 137 )\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

数値の正規表現を作成する際に、この回答で説明されている状況を検討することをお勧めします。

于 2010-11-23T14:57:12.047 に答える
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

言語を指定しなかったので、ここにいくつかの 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 に答える