假设我在文本文件中有以下文字
第一篇文章
“Some Text”
“124arandom txt,不应解析!@
“124 Some Text”
“어떤글”
这篇文章不应该解析
我想将Some Text
,124 Some Text
和어떤 글
作为匹配的字符串进行检索。文本逐行读取。 Catch是,它必须匹配外语,如果它在引号内。
更新: 我发现了一些奇怪的东西。我正在尝试一些随机的东西并发现:
string s = "어떤 글"
Regex regex = new Regex("[^\"]*");
MatchCollection matches = regex.Matches(s);
匹配的count = 10并且在其中生成了一些空项(解析后的文本在索引2中)。当我正在做Regex.Replace时,这可能就是为什么我一直得到空字符串的原因。为什么会这样?
答案 0 :(得分:22)
如果你逐行阅读文本,那么正则表达式
"[^"]*"
会找到所有引用的字符串,除非这些字符串可能包含"a 2\" by 4\" board"
等转义引号。
要正确匹配,您需要
"(?:\\.|[^"\\])*"
如果您不希望引号成为匹配项的一部分,请使用lookaround assertions:
(?<=")[^"]*(?=")
(?<=")(?:\\.|[^"\\])*(?=")
这些正则表达式,如C#正则表达式,可以这样创建:
Regex regex1 = new Regex(@"(?<="")[^\""]*(?="")");
Regex regex2 = new Regex(@"(?<="")(?:\\.|[^""\\])*(?="")");
答案 1 :(得分:0)
。 您可以使用正则表达式,然后尝试将其与您想要的任何文本进行匹配。可以循环或者你需要什么。
string str = "\"your text\"";
//check for at least on char inside the qoutes
Regex r = new Regex("\".+\"");
bool ismatch = r.IsMatch(str);