c# регулярное выражение только первое совпадение в каждом предложении - PullRequest
1 голос
/ 08 января 2020

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

Предложение:

oListView.sTranslatedPrintHeader = Dictionary.gsTranslate (oClientInfo, "Lastschriftenstapel") & "" & DataMethods.gsGetDBValue (oClientInfo, "BatchDes c", "tdDebitAdviceBatches", "BatchID =" & lBatchID)

Response.Write (Dictionary.gsTranslate (oClientinfo, "Es bekhleten in", Es beonten) der Auswahl dargestellt werden,
"& _" das Design kann trotzdem modifiziert werden. "))

Регулярное выражение:

(?<=[D-d]ictionary\.gs[T-t]ranslate.*?, ?)( ?")((.|\n|\r)*?"\))

Пример и результаты: https://regexr.com/4rpfj

Итак, мой первый матч в порядке, но мое регулярное выражение не останавливается в этом предложении и продолжается, а затем соответствует

"BatchDes c", " tdDebitAdviceBatches "," BatchID = "& lBatchID)

Response.Write (Dictionary.gsTranslate (oClientinfo," Es konnten keine Befehle in der Auswahl dargestellt werden,
"& _" das Design kanden trojtzer zer Design kanden trojtzerde zer Design kanden trojtzt . ")

Какие совпадения я хочу * 10 29 *

"Lastschriftenstapel")

И

"Es konnten keine Befehle in der Auswahl dargestellt werden,<br>" & _ "das Design kann trotzdem modifiziert werden.")

Небольшое примечание: существует целый файл с несколькими совпадениями. Поэтому я не хочу, чтобы первое совпадение в тексте, я хочу первое совпадение после каждого Dictionary.gsTranslate.

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Вы можете использовать следующее регулярное выражение:

Смотрите здесь используемое регулярное выражение

(?<=(?i)dictionary\.gstranslate\([^)]+, *)"[^)]+"
# or the following with RegexOptions.IgnoreCase
(?<=dictionary\.gstranslate\([^)]+, *)"[^)]+"

Как это работает:

  • (?<=(?i)dictionary\.gstranslate\([^)]+, *) положительный взгляд позади, обеспечивающий следующее
    • (?i) включает флаг без учета регистра
    • dictionary\.gstranslate соответствует dictionary.gstranslate буквально (без учета регистра)
    • \( соответствует ( буквально
    • [^)]+ соответствует любому символу, кроме ) один или несколько раз
    • , * соответствует запятой буквально, затем любое количество пробелов
  • "[^)]+" соответствует ", затем любой символ, кроме ) один или несколько раз, затем "
0 голосов
/ 08 января 2020

Из того, что я вижу, \ n | \ r позволяет совпадению включать и go после "BatchDes c" ... Так как разрыв строки должен происходить с символом подчеркивания (из того, что я см. в вашем тексте) возможно, это подойдет вам:

(?<=[D-d]ictionary\.gs[T-t]ranslate.*?, ?)("(.|\_ ?\n|\_ ?\r)*?"(?=\)))

Я только что добавил обязательное подчеркивание перед \ n и \ r.

https://regexr.com/4rrv0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...