我有几千个字符串具有以下两种形式之一:
SomeT1tle-ThatL00ks L1k3.this - $3.57 KnownWord
SomeT1tle-ThatL00ks L1k3.that - 4.5% KnownWord
该SomeT1tle-ThatL00ks L1ke.this
部分可能包含大小写字符、数字、句点、破折号和空格。它后面总是跟着空格-破折号-空格模式。
我想提取标题(空格-破折号-空格分隔符之前的部分)和金额,就在KnownWord
.
所以对于这两个字符串,我想要:
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$/";
但是模式的第一部分总是匹配整个事物,即使是“懒惰”部分(.*?
而不是.*
)。我不能否定匹配空格和破折号,因为标题本身可以包含任何一个。
有什么提示吗?