在C#中,如果想匹配一个字符串,比如"国药准字HJ20090910 国药准字HJ20090911",并找出其中所有以"国药准字"开头的部分,可以使用正则表达式(Regex)来实现这一功能。
方法1:使用正则表达式匹配所有以"国药准字"开头的子串
可以使用`Regex.Matches`方法来找到所有匹配的子串。这里是如何做的:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string text = "国药准字HJ20090910 、国药准字HJ20090911";
string pattern = @"国药准字\w+"; // 使用\w+来匹配任何字母数字字符序列
MatchCollection matches = Regex.Matches(text, pattern);
foreach (Match match in matches)
{
Console.WriteLine(match.Value);
}
}
}
方法2:使用正则表达式捕获组(如果只关心"国药准字"后面的内容)
如果想要捕获"国药准字"后面的特定内容,比如字母和数字组合,可以使用捕获组:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string text = "国药准字Jsabc 国药准字jsbsc";
string pattern = @"国药准字(\w+)"; // 使用(\w+)来捕获字母数字字符序列
MatchCollection matches = Regex.Matches(text, pattern);
foreach (Match match in matches)
{
Console.WriteLine(match.Groups1.Value); // 输出捕获组的内容
}
}
}
```
解释:
-
`@"..."` 是C#中的verbatim string literal,允许字符串跨多行且内部不需要转义字符。
-
`\w+` 匹配一个或多个字母数字字符(等同于a-zA-Z0-9_)。如果你想匹配中文和字母数字,可以使用`\\u4e00-\\u9fa5a-zA-Z0-9+`。
-
`MatchCollection` 是一个包含所有匹配项的集合。
-
`match.Groups1.Value` 用于获取第一个捕获组的内容,即"国药准字"后面的内容。
完整示例(包括中文字符和字母数字):
如果需要匹配包含中文字符和字母数字的组合,可以修改正则表达式如下:
string pattern = @"国药准字(\\u4e00-\\u9fa5a-zA-Z0-9+)"; // 匹配中文字符和字母数字的组合
这样,无论后面的字符是中文字符还是字母数字,都能被正确匹配。