正则表达式匹配两个字符串之间的所有字符

时间:2011-05-24 11:45:58

标签: regex

实施例: “这只是一个简单的句子。”

我希望匹配“This is”和“sentence”之间的每个字符。换行符应该被忽略。我无法弄清楚正确的语法。

14 个答案:

答案 0 :(得分:504)

例如

(?<=This is)(.*)(?=sentence)

Regexr

我使用了lookbehind (?<=)并向前看(?=)以便“This is”和“sentence”不包含在匹配中,但这取决于你的用例,你也可以简单地写一下This is(.*)sentence

重要的是你激活正则表达式引擎的“dotall”模式,以便.与换行符匹配。但是你如何做到这一点取决于你的正则表达式引擎。

接下来是使用.*.*?。第一个是贪婪的,将匹配到你的字符串中的最后一个“句子”,第二个是懒惰的,将匹配到你的字符串中的下一个“句子”。

<强>更新

Regexr

This is(?s)(.*)sentence

在(?s)打开dotall修饰符的位置,使.与换行符匹配。

更新2:

(?<=is \()(.*?)(?=\s*\))

匹配您的示例“这是(一个简单的)句子”。请参阅Regexr

答案 1 :(得分:146)

需要懒惰量词

重新回答这个问题,因为接受的答案中的正则表达式对我来说似乎不太正确。为什么?因为

(?<=This is)(.*)(?=sentence)

将与my first sentence. This is my second

中的This is my first sentence. This is my second sentence.匹配

See demo

两个外观之间需要一个懒惰的量词。添加?会使明星变得懒惰。

这符合您的要求:

(?<=This is).*?(?=sentence)

See demo。我删除了不需要的捕获组。

DOTALL模式以匹配换行符

请注意,在演示中,&#34;点匹配换行模式&#34; (a.k.a.)dot-all已设定(见how to turn on DOTALL in various languages)。在许多正则表达式中,您可以使用在线修饰符(?s)进行设置,将表达式转换为:

(?s)(?<=This is).*?(?=sentence)

<强>参考

答案 2 :(得分:35)

尝试This is[\s\S]*sentence,适用于javascript

答案 3 :(得分:14)

此:

This is (.*?) sentence

适用于javascript。

答案 4 :(得分:13)

使用此:(?<=beginningstringname)(.*\n?)(?=endstringname)

答案 5 :(得分:1)

你可以简单地使用它:\This is .*? \sentence

答案 6 :(得分:1)

如果有人在Jenkins上下文中查找此示例。它解析build.log,如果找到匹配,它将使匹配失败。

ExecStart="/usr/bin/docker exec -it my_docker /usr/bin/php artisan queue:work --env=production --tries 2 --timeout 60"
User=ubuntu

答案 7 :(得分:0)

Sublime Text 3x

在崇高的文字中,你只需写下你感兴趣的两个单词,例如在你的情况下就是

&#34;这是&#34;和&#34;句子&#34;

你在

之间写。*

即。 This is .* sentence

这应该对你有好处

答案 8 :(得分:0)

以下是我的表现方式:
这对我来说比试图找出必要的特定正则表达式更容易。

int indexPictureData = result.IndexOf("-PictureData:");
int indexIdentity = result.IndexOf("-Identity:");
string returnValue = result.Remove(indexPictureData + 13);
returnValue = returnValue + " [bytecoderemoved] " + result.Remove(0, indexIdentity); ` 

答案 9 :(得分:0)

要在VIM中进行快速搜索,可以使用 在Vim Control提示符下:/这是。* \ _。*句子

答案 10 :(得分:0)

我在这里搜索正则表达式,以便在Python2中的旧脚本中使用print(“ string”)对于Python3在print“ string”之间转换此打印语法。效果很好,否则请使用2to3.py进行其他转换。这是我为其他人提供的解决方案:

在Regexr.com上尝试一下(由于某些原因在NP ++中不起作用):

find:     (?<=print)( ')(.*)(')
replace: ('$2')

对于变量:

(?<=print)( )(.*)(\n)
('$2')\n

对于标签和变量:

(?<=print)( ')(.*)(',)(.*)(\n)
('$2',$4)\n

How to replace all print "string" in Python2 with print("string") for Python3?

答案 11 :(得分:0)

这对我有用(我正在使用 VS Code ):

用于: This is just\na simple sentence

使用: This .+ sentence

答案 12 :(得分:0)

RegEx使用Java方法匹配两个字符串之间的所有内容。

List<String> results = new ArrayList<>(); //For storing results
String example = "Code will save the world";

让我们使用Pattern和Matcher对象来使用RegEx (。?)*

Pattern p = Pattern.compile("Code "(.*?)" world");   //java.util.regex.Pattern;
Matcher m = p.matcher(example);                      //java.util.regex.Matcher;

由于Matcher可能包含多个匹配项,因此我们需要遍历结果并将其存储。

while(m.find()){   //Loop through all matches
   results.add(m.group()); //Get value and store in collection.
}

此示例仅包含 “将保存” 单词,但是在较大的文本中可能会找到更多匹配项。

答案 13 :(得分:0)

有一种方法可以在一块文本中处理此拆分的重复实例?实例:“这只是一个简单的句子。这是一些其他内容。这是一个简单的句子。这是更多的东西。这是一个简单的句子。”要匹配每个实例而不是整个字符串,请使用以下代码:

data = "This is just\na simple sentence. Here is some additional stuff. This is just\na simple sentence. And here is some more stuff. This is just\na simple sentence."

pattern = re.compile('This is (?s).*? sentence')

for match_instance in re.finditer(pattern, data):
    do_something(match_instance.group())