簡體   English   中英

如何使用正則表達式匹配字符對?

[英]How to match pairs of characters using Regex?

我有一個包含字符串的變量。 該字符串僅包含字母和數字字符。 此字符串的長度也固定為32個字符。 我怎樣才能匹配使用正則表達式,如果此字符串只由2,4,8,16長配對字符?

例如,類似於以下字符串:

abcdefghijklmnopqrstuvwxyz012345

Regex.IsMatch必須返回false

但是對於類似於以下的字符串:

aaaaaaaaaaaaaaaaaa 5555555555555555

這是16個字符對;

aaaaaaaa 55555555aaaaaaaaaa55555555

這是8個字符對;

aaaa 5555aaaa5555aaaa5555aaaa5555

這是4個字符對;

aa 55aa55aa55aa55aa55aa55aa55aa55

這是2個字符對-

Regex.IsMatch必須返回true

編輯

顯然,要求僅是匹配例如aabbccddeeffgghhiijjkkllmmnnoopp ,即前兩個字符必須相同,然后接下來的兩個必須精確匹配32個字符。 可以使用以下方法輕松測試:

((\w)\2(\w)\3){8}

這應該起作用(無需為每種可能的組合提出單獨的正則表達式)。

public bool isRelevantMatch(string inputString)
{
    int matchCount = Regex.Matches(inputString, @"([a-zA-Z])\1{1}").Count;
    return matchCount == 1 || 
           matchCount == 2 || 
           matchCount == 4 || 
           matchCount == 8 ||
           matchCount == 16;
}

說明:獲取重復字符的匹配計數(使用反向引用正則表達式來匹配aa,AA,bb,BB等的任何實例)。 如果該計數是1、2、4 8,則返回true(字符串中有2、4、8或16個成對字符)。

遲到了,但是會丟掉這個。

如果您想重復“ 唯一對 ”,則在Perl中有效。
我試圖將其縮小,但不知道怎么做。

點網的語法可能是相同的。 但是,我已經重用了
捕獲組名稱,該名稱在Perl中有效,但不確定Dot-Net
(如果沒有更改為唯一名稱,應該可以)。

此外,在Perl中,本可以使用分支重置來覆蓋捕獲組,
然后測試單個組的長度以獲取重復順序,但這在點網中不可用。
因此,只需測試4個組的匹配(或長度)即可獲得訂單。

 # (?<A>(?<b>\w)\k<b>(?!\k<b>)(?<c>\w)\k<c>)\k<A>{7}|(?<A>(?<b>\w)\k<b>{3}(?!\k<b>)(?<c>\w)\k<c>{3})\k<A>{3}|(?<A>(?<b>\w)\k<b>{7}(?!\k<b>)(?<c>\w)\k<c>{7})\k<A>{1}|(?<A>(?<b>\w)\k<b>{15}(?!\k<b>)(?<c>\w)\k<c>{15}) 


   (?<A>                         # (1 start), 2 char pairs, repeating x 8
        (?<b> \w )                    # (2)
        \k<b> 

        (?! \k<b> )
        (?<c> \w )                    # (3)
        \k<c> 
   )                             # (1 end)
   \k<A>{7} 
|  
   (?<A>                         # (4 start), 4 char pairs, repeating x 4
        (?<b> \w )                    # (5)
        \k<b>{3} 

        (?! \k<b> )
        (?<c> \w )                    # (6)
        \k<c>{3} 
   )                             # (4 end)
   \k<A>{3} 

|  
   (?<A>                         # (7 start), 8 char pairs, repeating x 2
        (?<b> \w )                    # (8)
        \k<b>{7} 

        (?! \k<b> )
        (?<c> \w )                    # (9)
        \k<c>{7} 
   )                             # (7 end)
   \k<A>{1} 
|  
   (?<A>                         # (10 start), 16 char pairs
        (?<b> \w )                    # (11)
        \k<b>{15} 

        (?! \k<b> )
        (?<c> \w )                    # (12)
        \k<c>{15} 
   )                             # (10 end)

暫無
暫無

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

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