[英]RegEx to match different substrings based on string length
我正在尋找一個正則表達式來匹配字母數字字符串。 如果字符串長度為32個字符,則匹配字符17至28。如果字符串長度為34個字符,則匹配最后12個字符。
RegEx匹配條件http://s12.postimage.org/ghathiz2l/Screen_shot_2012_08_09_at_11_52_22_PM.png
我有兩個單獨的表達式來獲取兩個不同條件的匹配。
.(?<match>[0-9]{16}) and .(?<match>[0-9]{12})
在代碼中,我讀取了從右到左的表達式,處理了“ if”,並在原始字符串長32個字符時截斷了匹配的最后4個字符,但希望能夠通過一個RegEx做到這一點。
編輯
在這種情況下,我確實希望取消RegEx,但我不是該應用程序的原始作者。 字符串解析條件可能會隨時間變化,因此在這種情況下,在配置文件中維護RegEx比創建新版本要容易得多。 另外,這就是老板想要的...
嘗試這個:
^(.{22}(.{12}))|(.{16}(.{12}).{4})$
$1
是第一種情況的完整匹配項(長34個字符); $2
是匹配的12個字符。
$3
是第二種情況的全部匹配項(長度為32個字符); $4
是匹配的12個字符。
簡單!
另一種方法(可能更簡單)是查看入站字符串並根據字符串長度分配正確的regex實例:
private static Regex rx34 = ... ;
private static Regex rx32 = ... ;
string foo( string s )
{
Regex rx ;
switch ( s.Length )
{
case 34 : rx = rx34 ; break ;
case 32 : rx = rx32 ; break ;
default : throw new ArgumentOutOfRangeException("s") ;
}
Match m = rx.Match(s) ;
if ( !m.Success ) throw new InvalidOperationException() ;
... // return the appropriate part of the string.
}
或者,為什么要完全使用正則表達式? 對於正則表達式而言,這不是問題。
string foo( string s )
{
string s12 ;
switch (( s ?? "" ).Length)
{
case 34 : return s12 = s.Substring( 34 - 12 ) ;
case 32 : return s12 = s.Substring( 16 , 12 ) ;
default : throw new ArgumentOutOfRangeException("s");
}
return s12 ;
}
因為生活太困難了,所以事情變得比實際困難。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.