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