简介:
通过正则表达式,提取所需字符。
1.Regex
方法 | 说明 | |
---|---|---|
IsMatch(String, String) | 指示所指定的正则表达式在指定的输入字符串中是否找到了匹配项。 | |
IsMatch(String, String, RegexOptions) | 指示所指定的正则表达式是否使用指定的匹配选项在指定的输入字符串中找到了匹配项。 | |
Match(String, String) | 在指定的输入字符串中搜索指定的正则表达式的第一个匹配项。 | |
Match(String, String, RegexOptions) | 使用指定的匹配选项在输入字符串中搜索指定的正则表达式的第一个匹配项。 | |
Replace(String, String, String) | 在指定的输入字符串内,使用指定的替换字符串替换与指定正则表达式匹配的所有字符串。 | |
Replace(String, String, String, RegexOptions) | 在指定的输入字符串内,使用指定的替换字符串替换与指定正则表达式匹配的所有字符串。 指定的选项将修改匹配操作。 | |
成员 | 说明 |
---|---|
None | 指定不设置任何选项。 |
IgnoreCase | 指定不区分大小写的匹配。 |
Multiline | 多行模式。 更改 ^ 和 $ 的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。 |
ExplicitCapture | 指定唯一有效的捕获是显式命名或编号的 (?<name>…) 形式的组。 这使未命名的圆括号可以充当非捕获组,并且不会使表达式的语法 (?:...) 显得笨拙。 |
Compiled | 指定将正则表达式编译为程序集。 这会产生更快的执行速度,但会增加启动时间。 在调用 CompileToAssembly 方法时,不应将此值分配给 Options 属性。 |
Singleline | 指定单行模式。 更改点 (.) 的含义,以使它与每个字符(而不是除 \n 之外的所有字符)匹配。 |
IgnorePatternWhitespace | 消除模式中的非转义空白并启用由 # 标记的注释。 但是,IgnorePatternWhitespace 值不会影响或消除 字符类中的空白。 |
RightToLeft | 指定搜索从右向左而不是从左向右进行。 |
ECMAScript | 为表达式启用符合 ECMAScript 的行为。 该值只能与 IgnoreCase、Multiline 和 Compiled 值一起使用。 该值与其他任何值一起使用均将导致异常。 |
CultureInvariant | 指定忽略语言中的区域性差异。 |
- Match方法
string input = "123abc";
string pattern = @"\d*";
//取出第一个匹配的
Match match = Regex.Match(input, pattern);
if (match.Success)
{
string value = match.Value;
}
//取出所有匹配的
MatchCollection matchs = Regex.Matches(input, pattern);
foreach (Match var in matchs)
{
if (!string.IsNullOrEmpty(var.Value))
{
string value = var.Value;
}
}
2.提取字符部分
1.取出十进制数字
string input = "123abc";
string pattern = @"\d*";
Match match = Regex.Match(input, pattern);
if (match.Success)
{
string value = match.Value;
}
2.取出字母
1.区分大小写
[a-z]是小写,[A-Z]是大写。
string input = "123abc";
string pattern = @"[a-z]*"; //小写字母
MatchCollection matchs = Regex.Matches(input, pattern);
foreach (Match var in matchs)
{
if (!string.IsNullOrEmpty(var.Value))
{
string value = var.Value;
}
}
2.不区分大小写
以字符d为例,不区分大小写。
string input = "11223aabbcDd";
string pattern = @"d*";
//RegexOptions属性
MatchCollection matchs = Regex.Matches(input, pattern, RegexOptions.IgnoreCase);
foreach (Match var in matchs)
{
if (!string.IsNullOrEmpty(var.Value))
{
string value = var.Value;
}
}
3.取出相同字符
1.两个相同
1.取出两个相同的数字
string input = "11223aabbc";
string pattern = @"(?<char>\d)\k<char>";
MatchCollection matchs = Regex.Matches(input, pattern);
foreach (Match var in matchs)
{
if (!string.IsNullOrEmpty(var.Value))
{
string value = var.Value;
}
}
2.取出两个相同的字母
string input = "11223aabbc";
string pattern = @"(?<char>[a-z])\k<char>";
MatchCollection matchs = Regex.Matches(input, pattern);
foreach (Match var in matchs)
{
if (!string.IsNullOrEmpty(var.Value))
{
string value = var.Value;
}
}
3.取出两个相同的字符
string input = "11223aabbc";
string pattern = @"(?<char>\w)\k<char>";
MatchCollection matchs = Regex.Matches(input, pattern);
foreach (Match var in matchs)
{
if (!string.IsNullOrEmpty(var.Value))
{
string value = var.Value;
}
}
2.多个相同
以字符1为例。更改此字符,即可提取相应的字符。
1. 取出多个重复的指定字符
string input = "11223aabbc";
//第一种
string pattern = @"1*"; //指定提取"1"的重复
MatchCollection matchs = Regex.Matches(input, pattern);
foreach (Match var in matchs)
{
if (!string.IsNullOrEmpty(var.Value))
{
string value = var.Value;
}
}
//第二种
pattern = @"(?>1)*"; //贪婪表达式
MatchCollection matchs = Regex.Matches(input, pattern);
foreach (Match var in matchs)
{
if (!string.IsNullOrEmpty(var.Value))
{
string value = var.Value;
}
}
2.取出多个重复的未指定字符
- 以下可以取出至少3个相同的字符,可以取出字符“eeee”。
- \1代表重复。
- 更改{2,} 中的数字,即可匹配至少相应的数目 + 1。
string input = "11223aabbcDdeeee";
string pattern = @"([1-9a-zA-Z])\1{2,}";
MatchCollection matchs = Regex.Matches(input, pattern, RegexOptions.IgnoreCase);
foreach (Match var in matchs)
{
if (!string.IsNullOrEmpty(var.Value))
{
string value = var.Value;
}
}