0

次の 2 つの形式のいずれかを持つ数千の文字列があります。

SomeT1tle-ThatL00ks L1k3.this - $3.57 KnownWord

SomeT1tle-ThatL00ks L1k3.that - 4.5% KnownWord

このSomeT1tle-ThatL00ks L1ke.this部分には、大文字と小文字、数字、ピリオド、ダッシュ、およびスペースを含めることができます。常にスペース-ダッシュ-スペースのパターンが続きます。

Title (スペース-ダッシュ-スペース区切りの前の部分) と の直前にある Amount を引き出したいKnownWord

したがって、これらの 2 つの文字列については、次のようにします。

SomeT1tle-ThatL00ks L1k3.this, $3.57

SomeT1tle-ThatL00ks L1k3.that, 4.5%.

このコードは機能します (Perl の同等の正規表現を使用)

$my_string = "SomeT1tle-ThatL00ks L1k3.this - $3.57 KnownWord";

$pattern_title = "/^(.*?)\x20\x2d\x20/";
$pattern_amount = "/([0-9.$%]+) KnownWord$/";

preg_match_all($pattern_title, $my_string, $matches_title);
preg_match_all($pattern_amount, $my_string, $matches_amount);

echo $matches_title[1][0] . "  " . $matches_amount[1][0] . "<br>";

両方のパターンをまとめてみました:

$pattern_together_doesnt_work = "/^(.*?)\x20\x2d\x20([0-9.$%]+) KnownWord$/";

ただし、パターンの最初の部分は、「怠惰な」部分 (.*?ではなく.*) であっても、常に全体に一致します。タイトル自体にどちらも含めることができるため、スペースとダッシュを否定的に一致させることはできません。

ヒントはありますか?

4

1 に答える 1

1

このパターンを使用

/^(.*?)\x20\x2d\x20([0-9.$%]+) KnownWord$/
于 2013-09-21T19:20:56.087 に答える