如何获取 2 个字符串之间的文本.下面给出了

本文关键字:文本 之间 字符串 何获取 获取 | 更新日期: 2023-09-27 18:34:49

字符串,

我想从中提取文本。

字符串:

Hello Mr John and Hello Ms Rita

正则表达式

Hello(.*?)Rita

尝试在"你好"和"丽塔"的 2 个字符串之间获取文本,我正在使用上面给出的正则表达式,但它给了我

Mr John and Hello Ms

这是错误的。 我只需要"女士"谁能帮我为这种情况编写正确的正则表达式?

如何获取 2 个字符串之间的文本.下面给出了

使用温和的贪婪令牌:

Hello((?:(?!Hello|Rita).)*)Rita
       ^^^^^^^^^^^^^^^^^^^

在此处查看正则表达式演示

(?:(?!Hello|Rita).)*是经过调节的贪婪令牌,仅匹配未HelloRita的文本。如果需要检查整个单词,您可以添加单词边界'b

为了获得两端没有空格的Ms,请使用以下正则表达式变体:

Hello's*((?:(?!Hello|Rita).)*?)'s*Rita

?添加到*将形成一个惰性量词*?,该量词匹配查找匹配项所需的尽可能少的字符,并且's*将匹配零个或多个空格。

为了获得与结束单词最接近的匹配,请在初始单词前面放置一个贪婪的点。

.*Hello(.*?)Rita

在正则表达式101
观看演示

或者在捕获中没有空格:.*Hello's*(.*?)'s*Rita
或者使用两个捕获组:.*(Hello's*(.*?)'s*Rita)

您的(.*?)拾取的文本过多,因为.*匹配任何字符串。所以它抓住了从第一个"你好"到最后的"丽塔"的所有内容。

获得所需内容的一种简单方法是使用此正则表达式:

Hello ('S+) Rita

'S匹配任何非空格字符,因此'S+匹配任何连续的非空格字符字符串,即单个单词。

这会更健壮一些,允许单词之间有多个空格或其他空格:

Hello's+('S+)'s+Rita

演示

您可以使用前瞻和后视(?<=Hello).*?(?=Rita)