Как сопоставить строку в кавычках с помощью 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);