繁体   English   中英

c#正则表达式只在每个句子中第一个匹配

[英]c# regex only first match in each sentence

我几乎有我的正则表达式,但后来我遇到了一个无法解决的问题。

句子:

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

Response.Write(Dictionary.gsTranslate(oClientinfo,"Es konnten keine Befehle in der Auswahl dargestellt werden,
" & _ "das Design kann trotzdem modifiziert werden。"))

正则表达式:

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

示例和输出: https : //regexr.com/4rpfj

所以我的第一场比赛没问题,但我的正则表达式并没有停在那个句子中而是继续然后匹配

"BatchDesc", "tdDebitAdviceBatches", "BatchID=" & lBatchID)

Response.Write(Dictionary.gsTranslate(oClientinfo,"Es konnten keine Befehle in der Auswahl dargestellt werden,
" & _ "das Design kann trotzdem modifiziert werden。")

我想要什么搭配

"Lastschriftenstapel")

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

小注意:有一个包含多个匹配项的整个文件。 所以我不想要文本中的第一个匹配项,我想要每个Dictionary.gsTranslate之后的第一个匹配项。

您可以使用以下正则表达式:

请参阅此处使用的正则表达式

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

这个怎么运作:

  • (?<=(?i)dictionary\\.gstranslate\\([^)]+, *)正向后视确保以下前置
    • (?i)启用不区分大小写的标志
    • dictionary\\.gstranslate从字面上匹配dictionary.gstranslate (不区分大小写)
    • \\(匹配(字面意思
    • [^)]+匹配除)以外的任何字符一次或多次
    • , *字面上匹配逗号,然后是任意数量的空格
  • "[^)]+"匹配" ,然后匹配除)以外的任何字符一次或多次,然后"

从我所见, \\n|\\r 允许匹配包含并通过“BatchDesc”......由于换行符应该与下划线字符一起出现(从我在你的文本中看到的)也许这会满足您的需求:

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

我只是在 \\n 和 \\r 之前添加了强制下划线。

https://regexr.com/4rrv0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM