12

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

第一个文本

《一些文字》

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

《124 一些文字》

“어떤글”

不应解析此文本

我想检索Some Text,124 Some Text어떤 글作为匹配的字符串。文本逐行读取。抓住的是,如果它在引号内,它也必须匹配外语。

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

string s = "어떤 글"
Regex regex = new Regex("[^\"]*");
MatchCollection matches = regex.Matches(s);

匹配项的计数 = 10 并在内部生成了一些空项(解析的文本在索引 2 中)。这可能就是为什么我在做 Regex.Replace 时总是得到空字符串的原因。为什么会这样?

4

2 回答 2

25

如果您逐行阅读文本,则正则表达式

"[^"]*"

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

要正确匹配这些,您需要

"(?:\\.|[^"\\])*"

如果您不希望引号成为匹配的一部分,请使用环视断言

(?<=")[^"]*(?=")
(?<=")(?:\\.|[^"\\])*(?=")

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

Regex regex1 = new Regex(@"(?<="")[^\""]*(?="")");
Regex regex2 = new Regex(@"(?<="")(?:\\.|[^""\\])*(?="")");
于 2012-08-08T07:19:07.550 回答
0

. 您可以使用正则表达式,然后尝试将其与您想要的任何文本匹配。可以在一个循环或任何你需要的。

string str = "\"your text\"";
//check for at least on char inside the qoutes
Regex r = new Regex("\".+\"");
bool ismatch = r.IsMatch(str); 
于 2012-08-08T07:38:12.393 回答