C# 如何在两个字符串之间获取文本?

C# 如何在两个字符串之间获取文本?,c#,regex,C#,Regex,下面给出了我想从中提取文本的字符串 字符串: Hello Mr John and Hello Ms Rita 正则表达式 我尝试在两个字符串之间获取文本,其中“Hello”和“Rita”我使用的是上面给定的正则表达式,但它给了我 Mr John and Hello Ms 这是错误的。我只需要“Ms”,有人能帮我写出适合这种情况的正则表达式吗?使用: 看 (?:(?!Hello | Rita)。*是一个标记,它只匹配不是Hello或Rita的文本。如果需要检查整个单词,可以添加单词边界\b 要

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

字符串:

Hello Mr John and Hello Ms Rita
正则表达式

我尝试在两个字符串之间获取文本,其中“Hello”和“Rita”我使用的是上面给定的正则表达式,但它给了我

Mr John and Hello Ms
这是错误的。我只需要“Ms”,有人能帮我写出适合这种情况的正则表达式吗?

使用:

(?:(?!Hello | Rita)。*
是一个标记,它只匹配不是
Hello
Rita
的文本。如果需要检查整个单词,可以添加单词边界
\b

要获得两端无空格的
Ms
,请使用以下命令:

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

您的
(*?
拾取的文本太多,因为
*
匹配任何字符串。所以它抓住了从第一个“你好”到最后的“丽塔”的一切

一种简单的方法是使用以下正则表达式:

Hello (\S+) Rita
\S
匹配任何非空白字符,因此
\S+
匹配任何连续的非空白字符字符串,即单个单词

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

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

要获得与结束词最接近的匹配,请在起始词前面加一个点

.*Hello(.*?)Rita

或在捕获中不带空格:

或者使用两个捕获组:

您可以使用lookahead和lookahead
(?在
Hello
Rita
之间,还有更多带标点符号的单词,中间还有另一个
Hello
?那么,这种方法就行不通了。当然,这是真的。我可以想象在其他任何情况下,这种方法都会失败,或者你的方法也会失败。考虑到所提出的简单问题,我简单的解决方案到此为止。但是看到各种解决问题的方法是很有价值的,因此您发布的解决方案非常受欢迎。当然,要提供真正可靠的解决方案,我们需要更好地了解可能遇到的其他类型的输入字符串。对于单个测试字符串,我们只能猜测并尝试在甚至健壮性和简单性。
Hello (\S+) Rita
Hello\s+(\S+)\s+Rita
.*Hello(.*?)Rita