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

< p >的例子: # EYZ0。< / p >

我想匹配This issentence之间的每个字符。换行符应该被忽略。我想不出正确的语法。

1190530 次浏览

例如

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

Regexr .

我使用向后看(?<=)和向前看(?=),这样“This is”和“sentence”就不包括在匹配中,但这取决于你的用例,你也可以简单地写This is(.*)sentence

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

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

更新

Regexr .

This is(?s)(.*)sentence

(?s)打开dotall修饰符,使.匹配换行符。

更新2:

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

匹配你的例子“这是(一个简单的)句子”。看这里的Regexr

尝试This is[\s\S]*?sentence,工作在javascript

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

需要惰性量词

重新提出这个问题是因为公认答案中的正则表达式对我来说似乎不太正确。为什么?因为

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

将匹配my first sentence. This is my secondThis is my first sentence. This is my second sentence.

# EYZ0。

在两个环视之间需要一个惰性量词。添加?会使星形变懒。

这是你想要的:

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

# EYZ0。我删除了不需要的捕获组。

DOTALL模式匹配跨换行

注意,在演示中,“点匹配换行模式”(a.k.a)点-all被设置了(见如何打开DOTALL在各种语言)。在许多正则表达式中,你可以使用在线修饰符(?s)来设置它,将表达式转换为:

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

参考

这样的:

This is (.*?) sentence

工作在javascript。

您可以简单地使用这个:\This is .*? \sentence

如果有人在Jenkins上下文中寻找这样的例子。它会解析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)
}
}
}

Sublime Text 3x

在崇高的文本中,你只需写下你感兴趣的两个单词,例如在你的例子中,它是

“这女儿家;和“;sentence"

在中间写。*

即# EYZ0

这对你有好处

我是这样做的:
这对我来说比试图找出特定的必要的正则表达式更容易

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

在VIM中快速搜索,您可以使用 at Vim控制提示符:/这是。*\_.*句子

.*句子

我在这里搜索regex来转换这个打印语法,在Python2中的旧脚本中使用:print("string")在Python3中打印"string"。工作得很好,否则使用2to3.py进行其他转换。以下是我对其他人的解决方案:

试试Regexr.com(不工作在NP++出于某种原因):

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

变量:

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

对于标签和变量:

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

如何替换所有打印“;字符串”;在Python2与打印("字符串")为Python3?< / >

这为我工作(我使用VS代码):

< p >: # EYZ0 < / p > < p >使用: # EYZ0 < / p >

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

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

让我们使用Pattern和Matcher对象来使用regex# EYZ0。

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.
}

这个例子将只包含"将保存" .字,但是在较大的文本中,它可能会找到更多匹配项。

有一种方法来处理在文本块中这种分裂的重复实例?例如:“这只是一个简单的句子。”这里还有一些额外的东西。这只是一个简单的句子。这里还有一些东西。这只是一个简单的句子。“。要匹配每个实例而不是整个字符串,使用下面的代码:

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())

如果是JavaScript,你可以使用[^]匹配任何字符,包括换行符

使用/s标记和点.来匹配任何字符也可以,但它应用于整个模式,JavaScript不支持内联修饰符来打开/关闭标记。

为了匹配尽可能少的字符,可以通过添加问号来使量词非贪婪,并使用捕获组提取介于两者之间的部分。

This is([^]*?)sentence

看到regex101演示

作为旁注,为了不匹配部分单词,你可以使用像\bThissentence\b这样的单词边界

const s = "This is just\na simple sentence";
const regex = /This is([^]*?)sentence/;
const m = s.match(regex);


if (m) {
console.log(m[1]);
}


JavaScript中的查找变量是(?<=This is)[^]*?(?=sentence),您可以检查在JS正则表达式中向后看以获得支持。

参见关于向后查找的重要注意事项

const s = "This is just\na simple sentence";
const regex = /(?<=This is)[^]*?(?=sentence)/;
const m = s.match(regex);


if (m) {
console.log(m[0]);
}

我有这个字符串

      headers:
Date:
schema:
type: string
example: Tue, 23 Aug 2022 11:36:23 GMT
Content-Type:
schema:
type: string
example: application/json; charset=utf-8
Transfer-Encoding:
schema:
type: string
example: chunked
Connection:
schema:
type: string
example: keep-alive
Content-Encoding:
schema:
type: string
example: gzip
Vary:
schema:
type: string
example: Accept-Encoding
Server:
schema:
type: number
example: Microsoft-IIS/10.0
X-Powered-By:
schema:
type: string
example: ASP.NET
Access-Control-Allow-Origin:
schema:
type: string
example: '*'
Access-Control-Allow-Credentials:
schema:
type: boolean
example: 'true'
Access-Control-Allow-Headers:
schema:
type: string
example: '*'
Access-Control-Max-Age:
schema:
type: string
example: '-1'
Access-Control-Allow-Methods:
schema:
type: string
example: GET, PUT, POST, DELETE
X-Content-Type-Options:
schema:
type: string
example: nosniff
X-XSS-Protection:
schema:
type: string
example: 1; mode=block
content:
application/json:

我想删除所有从headers:content的单词,所以我写了这个正则表达式(headers:)[^]*?(content)

结果和预期的一样,这个表达式出现了多少次。