在句子和/或一系列字符内匹配正则表达式

时间:2014-05-22 00:16:07

标签: regex wildcard

我正在努力寻找一个跟着已知的“锚”的术语。字。到目前为止,我已经做了类似以下的事情:

 Weight(:( )?)(\d{1,2} lbs|pounds|ounces|kilos)

所以像

这样的字符串
  • 体重:10磅

返回" 10磅"对我来说(实际上我用名字组来识别数字和措施,但我离题了)。我发现在某些情况下可以预先提供一些文字,例如

  • 体重:最高10磅

  • 体重:最高可达10磅或不超过10磅。

我希望在它之间插入一些正则表达式,以允许合理的#个随机字符或任何带有句点或行返回的随机字符#。我尝试了一个选项

Weight(:( )?)(.*?)(?P<WEIGHT>(\d{1,2} lbs|pounds|ounces|kilos))[.\n]

但这会返回许多误报。所以基本上寻找:

重量:(任何合理的字符数,但不是句号或新行)(值)测量)

这将解释所需句子的大部分变化。

我最接近的是

Weight[^.]{1,30}(?P<WEIGHT>(\d{1,5})( Pounds| Kilos))

的测试字符串
  • &#34;体重可以是250磅&#34;

返回

  • &#34;重量[16-24] 0 Pounds&#34;

没有通配符的测试字符串

(?P<WEIGHT>(\d{1,5})( Pounds| Kilos))

返回

  • 重量[14-24] 250 Pounds

这正是我正在寻找的(在此示例的上下文中)

1 个答案:

答案 0 :(得分:0)

这样的事情:

/weight.*?\s(?P<number>\d+)\s+(?P<name>(?:lb|pound|ounce|kilo)s?)(?:$|\s|\pP)/i
  • &#34;重量&#34;随后是任何事情(不贪心)
  • 带有空格的数字
  • 带有字符串结尾,后跟空格或标点符号的名称

在您之前的一个问题中,您使用的是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>";
    }
}