如何获取2个字符串之间的文本?

时间:2016-02-16 08:09:17

标签: c# regex

下面给出了字符串,我想从中提取文本。

字符串:

Hello Mr John and Hello Ms Rita

正则表达式

Hello(.*?)Rita

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

Mr John and Hello Ms

这是错误的。我只需要" Ms"任何人都可以帮助我为这种情况写出正确的正则表达式吗?

4 个答案:

答案 0 :(得分:2)

使用tempered greedy token

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

请参阅regex demo here

(?:(?!Hello|Rita).)*是驯化的贪婪令牌,仅匹配非HelloRita的文字。如果您需要检查整个单词,可以添加单词边界\b

为了获得两端没有空格的Ms,请使用此regex variation

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

?添加到*将形成一个惰性量词*?,它匹配查找匹配所需的少量字符,而\s*将匹配零个或多个空格

答案 1 :(得分:1)

要获得与结束字最接近的匹配,请让初始字前面的greedy点消耗。

.*Hello(.*?)Rita

See demo at regex101

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

答案 2 :(得分:0)

由于(.*?)匹配任何字符串,因此.*文字过多。因此它最终抓住了从第一个“Hello”到“Rita”的所有内容。

通过这个正则表达式可以轻松获得所需内容:

Hello (\S+) Rita

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

这将更加健壮,允许在单词之间存在多个空格或其他空格:

Hello\s+(\S+)\s+Rita

Demo

答案 3 :(得分:0)

你可以使用lookahead和lookbehind (?<=Hello).*?(?=Rita)