我正在努力寻找一个跟着已知的“锚”的术语。字。到目前为止,我已经做了类似以下的事情:
Weight(:( )?)(\d{1,2} lbs|pounds|ounces|kilos)
所以像
这样的字符串返回" 10磅"对我来说(实际上我用名字组来识别数字和措施,但我离题了)。我发现在某些情况下可以预先提供一些文字,例如
或
我希望在它之间插入一些正则表达式,以允许合理的#个随机字符或任何带有句点或行返回的随机字符#。我尝试了一个选项
Weight(:( )?)(.*?)(?P<WEIGHT>(\d{1,2} lbs|pounds|ounces|kilos))[.\n]
但这会返回许多误报。所以基本上寻找:
重量:(任何合理的字符数,但不是句号或新行)(值)测量)
这将解释所需句子的大部分变化。
我最接近的是
Weight[^.]{1,30}(?P<WEIGHT>(\d{1,5})( Pounds| Kilos))
但
的测试字符串返回
0 Pounds
&#34; 没有通配符的测试字符串
(?P<WEIGHT>(\d{1,5})( Pounds| Kilos))
返回
250 Pounds
这正是我正在寻找的(在此示例的上下文中)
答案 0 :(得分:0)
这样的事情:
/weight.*?\s(?P<number>\d+)\s+(?P<name>(?:lb|pound|ounce|kilo)s?)(?:$|\s|\pP)/i
在您之前的一个问题中,您使用的是PHP。这是一些测试代码:
$regex = '/weight.*?\s(?P<number>\d+)\s+(?P<name>(?:lb|pound|ounce|kilo)s?)(?:$|\s|\pP)/i';
$tests = array(
'Weight: 65 lbs',
'Weight: up to 1 kilo',
'Weight: can be up to or not more then 10 lbs.',
'Weight can be 250 ounces',
'His weight is around 75 kilos',
'He is very heavy -- about 190 kilos!',
);
foreach ($tests as $test) {
preg_match($regex, $test, $match);
if (empty($match)) {
echo "No match (\"$test\")<br>";
} else {
echo "Match: {$match['number']} {$match['name']} (\"$test\")<br>";
}
}