Это работает для меня:
\"((?:[^\\"]|(?:\\\"))*)\"\.Localize\(\)
Проверено на http://www.regexplanet.com/simple/index.html против ряда строк с различными экранированными кавычками.
Похоже, большинство из нас, кто ответил на это, имели ту же грубую идею, поэтому позвольте мне объяснить подход (комментарии после #
с):
\" # We're looking for a string delimited by quotation marks
( # Capture the contents of the quotation marks
(?: # Start a non-capturing group
[^\\"] # Either read a character that isn't a quote or a slash
|(?:\\\") # Or read in a slash followed by a quote.
)* # Keep reading
) # End the capturing group
\" # The string literal ends in a quotation mark
\.Localize\(\) # and ends with the literal '.Localize()', escaping ., ( and )
Для C # вам нужно дважды избегать косых черт (грязно):
\"((?:[^\\\\\"]|(?:\\\\\"))*)\"\\.Localize\\(\\)
Марк правильно указывает, что этот символ не соответствует экранированным символам, кроме кавычек. Итак, вот лучшая версия:
\"((?:[^\\"]|(?:\\")|(?:\\.))*)\"\.Localize\(\)
И его сокращенный эквивалент:
\"((?:[^\\\\\"]|(?:\\\\\")|(?:\\\\.))*)\"\\.Localize\\(\\)
Работает так же, за исключением особого случая, когда, если он встречает косую черту, но не может соответствовать \"
, он просто использует косую черту и следующий символ и движется дальше.
Думая об этом, лучше всего потреблять два символа в каждом слэше, что фактически является ответом Марка, поэтому я не буду повторять его.