簡體   English   中英

正則表達式匹配重復文本除以可以在多行字符串中重復多次的哈希字符

[英]regex to match repetitive text divided by hash character that can repeat multiple times in multi line string

我有以下正則表達式與 C# 一起使用

^.*(#\w+?#.+?#.+?#.+?#.+?:).*$

我需要能夠在多行字符串中提取特定格式字符串的最后一次出現

格式可以是:

#test12345-abc#slkjs3234-df#slkj23423#slkjdj2343:{asdf9230-232_jk233}

或者

#test12345-abc#slkjs3234-df#slkj23423#slkjdj2343:

並且可以讓格式出現 1 次或多次並背靠背,請參見下面的示例:

示例 1:

jlkjlkjlkjlkj
lkjlkjlj lkjlkj  #test12345-abc#slkjs3234-df#slkj23423#slkjdj2343:{asdf9230-232_jk233}  lkjlj
slkjlj

示例 2:

jlkjlkjlkjlkj
lkjlkjlj lkjlkj #test12345-abc#slkjs3234-df#slkj23423#l23lkj22:{asdf9230-232_jk233} #test12345-abc#slkjs3234-df#slkj23423#Other:{asdf9230-232_jk233}  lkjlj
slkjlj

示例 3:

jlkjlkjlkjlkj
lkjlkjlj lkjlkj  #test12345-abc#slkjs3234-df#slkj23423#slkjdj2343:  lkjlj
slkjlj

示例 4:

jlkjlkjlkjlkj
lkjlkjlj lkjlkj #test12345-abc#slkjs3234-df#slkj23423#l23lkj22: #test12345-abc#slkjs3234-df#slkj23423#Other:  lkjlj
slkjlj

我正在努力尋找合適的正則表達式來查找示例和示例中的不同位置? 謝謝

您可以使用

var result = Regex.Match(text, @"(?:#\w+(?:-\w+)?)+(?::{[\w-]+})?", RegexOptions.RightToLeft)?.Value;

請參閱正則表達式演示 請注意, RegexOptions.RightToLeft選項使正則表達式引擎從字符串的末尾搜索匹配項,因此如果有多個匹配項,您將獲得最后一個匹配項。

細節

  • (?:#\\w+(?:-\\w+)?)+ - 一次或多次重復
    • # - 一個#字符
    • \\w+ - 一個或多個單詞字符(字母、數字、下划線)
    • (?:-\\w+)? - 一個可選的非捕獲組匹配 1 或 0 次出現-然后是 1+ 個單詞字符
  • (?::{[\\w-]+})? - 一個可選的非捕獲組:
    • : - 一個冒號
    • {[\\w-]+} - 一個{字符,然后是一個或多個字母、數字、下划線或連字符,然后是一個}字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM