如何使用正则表达式匹配引号中的字符串

l46*_*kok 11 .net c# regex string

假设我在文本文件中有以下文本

第一文

"一些文字"

"124arandom txt,不应该被解析!@

"124 Some Text"

"어떤글"

这篇文章不应该被解析

我想检索Some Text,124 Some Text?? ?作为匹配的字符串.文本逐行读取.Catch是,它必须匹配外语,如果它在引号内.

更新:我发现了一些奇怪的东西.我正在尝试一些随机的东西并发现:

string s = "?? ?"
Regex regex = new Regex("[^\"]*");
MatchCollection matches = regex.Matches(s);
Run Code Online (Sandbox Code Playgroud)

匹配的count = 10并且在其中生成了一些空项(解析后的文本在索引2中).当我正在做Regex.Replace时,这可能就是为什么我一直得到空字符串的原因.为什么会这样?

Tim*_*ker 22

如果你逐行阅读文本,那么正则表达式

"[^"]*"
Run Code Online (Sandbox Code Playgroud)

将找到所有引用的字符串,除非那些可能包含转义的引号,如"a 2\" by 4\" board".

要正确匹配这些,您需要

"(?:\\.|[^"\\])*"
Run Code Online (Sandbox Code Playgroud)

如果您不希望引号成为匹配项的一部分,请使用外观断言:

(?<=")[^"]*(?=")
(?<=")(?:\\.|[^"\\])*(?=")
Run Code Online (Sandbox Code Playgroud)

这些正则表达式,如C#正则表达式,可以像这样创建:

Regex regex1 = new Regex(@"(?<="")[^\""]*(?="")");
Regex regex2 = new Regex(@"(?<="")(?:\\.|[^""\\])*(?="")");
Run Code Online (Sandbox Code Playgroud)