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,只是鸟瞰一下)。所有的规则可以收集在一个单一的正则表达式或是复杂的?
谢谢你的建议
这很简单:
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