说明
在这个正则表达式中使用前瞻,它将捕获包含大提琴和莉莲的完整句子。
(?:(?<=\.)\s+|^)((?=(?:(?!\.(?:\s|$)).)*?\b[Cc]ello(?=\s|\.|$))(?=(?:(?!\.(?:\s|$)).)*?\b[Ll]illian(?=\s|\.|$)).*?\.(?=\s|$))
表达式分解为这些功能组件:
-
(?:(?<=\.)\s+|^) 在 . 之后开始匹配这句话,后跟任意数量的空格或字符串的开头
-
( 启动捕获组 1,它将捕获整个句子
-
(?= 开始展望
-
(?:(?!\.(?:\s|$)).)*? 确保正则表达式引擎不会通过强制它确认 . 后跟空格或字符串结尾来离开这句话
-
\b匹配单词break
-
[Cc]ello 匹配所需文本,全部小写或大写首字母
-
(?=\s|\.|$) 向前看以确保字符串有一个尾随空格、. 或字符串的结尾
-
) 展望结束
-
(?=(?:(?!\.(?:\s|$)).)*?\b[Ll]illian(?=\s|\.|$)) 这基本上是一样的,但对莉莲来说
-
.*?\.(?=\s|$) 捕获句子的其余部分,包括句点,并确保句点后跟空格或字符串结尾
-
)句尾捕获组1
代码示例
我不太了解python,所以我提供了一个PHP 示例。请注意,在 match 语句中,我使用了 s 选项,它允许 . 表达式匹配换行符
输入文字
Cello is a yellow parakeet who sings with Lillian. Toby is a clown who doesn't sing. Willy is a Wonka. Cello is a yellow Lillian.
Cello likes Lillian and kittens.
Lillian likes Cello and dogs. Cello has no friends. And Lillian also hasn't met anyone.
代码
<?php
$sourcestring="your source string";
preg_match_all('/(?:(?<=\.)\s+|^)((?=(?:(?!\.(?:\s|$)).)*?\b[Cc]ello(?=\s|\.|$))(?=(?:(?!\.(?:\s|$)).)*?\b[Ll]illian(?=\s|\.|$)).*?\.(?=\s|$))/s',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
匹配
$matches Array:
(
[0] => Array
(
[0] => Cello is a yellow parakeet who sings with Lillian.
[1] => Cello is a yellow Lillian.
[2] =>
Cello likes Lillian and kittens.
[3] =>
Lillian likes Cello and dogs.
)
[1] => Array
(
[0] => Cello is a yellow parakeet who sings with Lillian.
[1] => Cello is a yellow Lillian.
[2] => Cello likes Lillian and kittens.
[3] => Lillian likes Cello and dogs.
)
)
如果您绝对需要匹配字符串 Cello 出现在 Lillian 之前的句子,那么您可以使用这样的表达式。在这里,我只是移动了一个右括号。
(?:(?<=\.)\s+|^)((?=(?:(?!\.(?:\s|$)).)*?\b[Cc]ello(?=\s|\.|$)(?=(?:(?!\.(?:\s|$)).)*?\b[Ll]illian(?=\s|\.|$))).*?\.(?=\s|$))
输入文字
Cello is a yellow parakeet who sings with Lillian. Toby is a clown who doesn't sing. Willy is a Wonka. Cello is a yellow Lillian.
Cello likes Lillian and kittens.
Lillian likes Cello and dogs. Cello has no friends. And Lillian also hasn't met anyone.
捕获组 1 的输出
[1] => Array
(
[0] => Cello is a yellow parakeet who sings with Lillian.
[1] => Cello is a yellow Lillian.
[2] => Cello likes Lillian and kittens.
)