Answers:
例如
(?<=This is)(.*)(?=sentence)
我使用了向后看(?<=)
和向前看,(?=)
以便在匹配中不包括“这是”和“句子”,但这取决于您的用例,您也可以简单地编写This is(.*)sentence
。
这里重要的是要激活正则表达式引擎的“ dotall”模式,以使.
匹配换行符。但是,如何执行此操作取决于您的正则表达式引擎。
接下来是如果您使用.*
或.*?
。第一个是贪婪的,将匹配到字符串中的最后一个“句子”,第二个是懒惰的,将匹配到字符串中的下一个“句子”。
更新资料
This is(?s)(.*)sentence
(?s)打开dotall修饰符的位置,使之.
与换行符匹配。
更新2:
(?<=is \()(.*?)(?=\s*\))
与您的示例“这是(一个简单的)句子”匹配。在Regexr上看到这里
This is(?s)(.*)sentence
并且可以正常工作吗?
重新提出这个问题,因为接受的答案中的正则表达式对我而言似乎不太正确。为什么?因为
(?<=This is)(.*)(?=sentence)
将匹配my first sentence. This is my second
在This is my first sentence. This is my second sentence.
参见演示。
您需要在两种环视之间使用惰性的量词。添加a ?
使星星变懒。
这符合您的要求:
(?<=This is).*?(?=sentence)
参见演示。我删除了捕获组,这不是必需的。
DOTALL模式以匹配整个换行符
请注意,在演示中,设置了“点匹配换行模式”(又名:dot-all)(请参阅如何以各种语言打开DOTALL)。在许多正则表达式中,您可以使用online修饰符进行设置(?s)
,将表达式转换为:
(?s)(?<=This is).*?(?=sentence)
参考
.*
和.*?
我的答案(“更新”之前的段落)也说明了和之间的区别。因此,我认为我的答案不正确。
is incorrect
到doesn't seem quite correct to me
...希望这不会使您抽搐,可能只是对这种高流量答案的正则表达式的理解有所不同。
试试看This is[\s\S]*sentence
,可以在javascript中使用
[\s\S]*?
(也称为:非贪婪通配符)
这个:
This is (.*?) sentence
在javascript中工作。
如果有人在詹金斯语境中寻找这样的例子。它解析build.log,如果找到匹配项,则通过匹配项使构建失败。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
node{
stage("parse"){
def file = readFile 'build.log'
def regex = ~"(?s)(firstStringToUse(.*)secondStringToUse)"
Matcher match = regex.matcher(file)
match.find() {
capturedText = match.group(1)
error(capturedText)
}
}
}
在崇高的文字中,您只需写下您有兴趣保留的两个词,例如
“这是”和“句子”
然后在两者之间写。*
即 This is .* sentence
这应该对你有好处
这是我的操作方法:
对我而言,这比尝试找出必要的特定正则表达式要容易得多。
int indexPictureData = result.IndexOf("-PictureData:");
int indexIdentity = result.IndexOf("-Identity:");
string returnValue = result.Remove(indexPictureData + 13);
returnValue = returnValue + " [bytecoderemoved] " + result.Remove(0, indexIdentity); `
我在这里搜索正则表达式,以便在Python2中的旧脚本中使用print(“ string”)对于Python3在print“ string”之间转换此打印语法。效果很好,否则请使用2to3.py进行其他转换。这是我为他人准备的解决方案:
在Regexr.com上尝试一下(由于某些原因在NP ++中不起作用):
find: (?<=print)( ')(.*)(')
replace: ('$2')
对于变量:
(?<=print)( )(.*)(\n)
('$2')\n
对于标签和变量:
(?<=print)( ')(.*)(',)(.*)(\n)
('$2',$4)\n
这为我工作(我正在使用VS Code):
对于:
This is just\na simple sentence
采用:
This .+ sentence
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.
}
此示例将仅包含“将保存”一词,但是在较大的文本中,它将可能找到更多匹配项。