c#字符串操作规则使用正则表达式

本文关键字:正则表达式 规则 字符串 操作 | 更新日期: 2023-09-27 18:12:29

我有一个情况…
有一个字符串,可以包含数字,字母,和一些符号,我想从它提取或做一些替换基于一些"规则"。我认为最好是给出一些可能的情况和我想要做的例子(显示):

String           Display1   or  Display2
AB_X345           X345         or  ###X345  
AB_1234            1234        or  ###1234  
X987_TEXT_4567    X9874567     or  X987######4567  
X987TEXT4567      X9874567     or  X987####4567  
X798TEXT          X798         or  X798####  
789TEXT            789         or  789####  
X400              X400         or  X400   

所以实际上,当我发现X后面跟着数字时,我想显示它们。如果出现一些文本,我不想显示它,或者我想用字符(#)屏蔽它。如果没有X,我想只显示数字。Regex是最简单的方法吗?(我不熟悉regex,只是鸟瞰一下)。所有的规则可以收集在一个单一的正则表达式或是复杂的?

谢谢你的建议

c#字符串操作规则使用正则表达式

这很简单:

resultString = Regex.Replace(subjectString, 
    @"'D       # Match a non-digit character
    (?<!       # unless...
     X         #  it's an X
     (?='d)    #  which is followed by a digit.
    )          # End of lookbehind", 
    "", RegexOptions.IgnorePatternWhitespace);

将最后一行改为

    "#", RegexOptions.IgnorePatternWhitespace);

#屏蔽字符,而不是删除它们。

试试这个regex:

X'd|'d

/X'd|'d/g

这将只选择数字或以'X'开头的数字

为显示1试试:@"(?<![A-Za-z])X[0-9]+|[0-9]+"

var rx = new Regex(@"(?<![A-Za-z])X[0-9]+|[0-9]+");
var matches = rx.Matches("X987_TEXT_4567");
var result = "";
foreach (Match match in matches)
{
    result += match.Value;
}

在c# 4.0中你甚至可以做

var rx = new Regex(@"(?<![A-Za-z])(?<1>X[0-9]+)?(?:(?:[^0-9]*)(?<1>[0-9]+))*");
var match = rx.Match("X987_TEXT_4567_123");
var res = string.Concat(match.Groups[1].Captures.OfType<Capture>().Select(p => p.Value));

但是此时正则表达式变得有点不可读:-)

试试这个,检查下面的例子并测试它。

'd?X[0-9]+|[0-9]

例子:
http://rubular.com/r/cA5Y49pCtV