如何获取 2 个字符串之间的文本.下面给出了
本文关键字:文本 之间 字符串 何获取 获取 | 更新日期: 2023-09-27 18:34:49
字符串,
我想从中提取文本。
字符串:
Hello Mr John and Hello Ms Rita
正则表达式
Hello(.*?)Rita
我尝试在"你好"和"丽塔"的 2 个字符串之间获取文本,我正在使用上面给出的正则表达式,但它给了我
Mr John and Hello Ms
这是错误的。 我只需要"女士"谁能帮我为这种情况编写正确的正则表达式?
使用温和的贪婪令牌:
Hello((?:(?!Hello|Rita).)*)Rita
^^^^^^^^^^^^^^^^^^^
在此处查看正则表达式演示
(?:(?!Hello|Rita).)*
是经过调节的贪婪令牌,仅匹配未Hello
或Rita
的文本。如果需要检查整个单词,您可以添加单词边界'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)