gpt4 book ai didi

c# - 正则表达式根据字符串长度匹配不同的子字符串

转载 作者:太空宇宙 更新时间:2023-11-03 20:23:46 26 4
gpt4 key购买 nike

我正在寻找匹配字母数字字符串的正则表达式。如果字符串长度为 32 个字符,则匹配第 17 到第 28 个字符。如果字符串长度为 34 个字符,则匹配最后 12 个字符。

RegEx Match Conditions 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个字符。

简单!

另一种可以说更简单的方法是查看入站字符串并根据字符串长度分配正确的正则表达式实例:

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 ;
}

因为生活太难了,不能让事情比现在更难。

关于c# - 正则表达式根据字符串长度匹配不同的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11895194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com