Как сопоставить строку в кавычках с помощью Regex

Предположим, что у меня есть следующий текст в текстовом файле

Первый текст

"Некоторые тексты"

"124arandom txt, который не следует анализировать! @

"124 Некоторый текст"

"어떤 글"

этот текст не должен анализироваться.

Я хотел бы получить Some Text, 124 Some Text и 어떤 글 в соответствии с строками. Текст читается по строкам. Поймать, он должен соответствовать иностранным языкам, если он находится внутри кавычек.

Обновление: Я узнал что-то странное. Я пробовал некоторые случайные вещи и узнал, что:

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

имеет значение count = 10 и породили несколько пустых элементов внутри (анализируемый текст находится в индексе 2). Возможно, поэтому я продолжал получать пустую строку, когда просто делал Regex.Replace. Почему это происходит?

Ответ 1

Если вы читаете текст по строкам, то регулярное выражение

"[^"]*"

найдет все строки с кавычками, если они не содержат экранированные кавычки, такие как "a 2\" by 4\" board".

Чтобы правильно подобрать их, вам нужно

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

Если вы не хотите, чтобы кавычки становились частью матча, используйте поисковые запросы:

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

Эти регулярные выражения, как регулярные выражения С#, могут быть созданы следующим образом:

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

Ответ 2

. Вы можете использовать регулярное выражение, а затем попытаться сопоставить его с любым желаемым текстом. может быть в цикле или что вам нужно.

string str = "\"your text\"";
//check for at least on char inside the qoutes
Regex r = new Regex("\".+\"");
bool ismatch = r.IsMatch(str);