C# 使用正则表达式提取字符串的部分
我有几个字符串,如下所示: +H124005992014011/152739999999I05Z +H703970000001/$9999999 I051 +K12200596205171/120911234C117 我需要将每个部分拆分为自己的变量。要做到这一点,我认为正则表达式是最好的方法 以下是拆分的规则C# 使用正则表达式提取字符串的部分,c#,.net,regex,C#,.net,Regex,我有几个字符串,如下所示: +H124005992014011/152739999999I05Z +H703970000001/$9999999 I051 +K12200596205171/120911234C117 我需要将每个部分拆分为自己的变量。要做到这一点,我认为正则表达式是最好的方法 以下是拆分的规则 第一个字符必须是“+” 第二部分必须有一个alpha字符,后跟三位数字。i、 e.H124、H703、K122 第三部分是一组字母数字字符(长度为1到13个字符) 第四部分是一个十进制
- 第一个字符必须是“+”
- 第二部分必须有一个alpha字符,后跟三位数字。i、 e.H124、H703、K122
- 第三部分是一组字母数字字符(长度为1到13个字符)
- 第四部分是一个十进制数字(0到9)
- 第五部分必须是“/”字符
- 第六部分是一个明确的五位数朱利安日期代码
- 第七部分是0到13个字母数字字符串
- 第八部分必须有一个字母字符(A到L),后跟两位数字
- 第九部分是一个字母数字字符
(^\+)(\D\d\d\d)(\w{1,13})(\d)(\/)(\d{5}|\$)(\w{0,13})\D\d\d\w$
我需要将上述模式转换为一种形式,允许我提取每个匹配部分屏幕
提前感谢您需要了解。基本上,将您关心的每个“组”都用括号括起来。然后,您可以按顺序引用这些组 有关在C#中使用捕获组的信息,请参见 不过,您描述的正则表达式与您的输入不太匹配-请参阅下面的powershell脚本
# Note, I have used **single-quotes**. This is VERY IMPORTANT!
# Powershell interprets a $ as a variable, unless it is inside single-quotes.
# This regex is as described in your comment
$regex = '^(\+)([a-zA-Z]\d{3})(\w{1,13})(\d)(/)(\d{5})(\w{0,13})([A-L]\d{2})(\w)$'
'+H124005992014011/1527399999999I05Z' -match $regex # TRUE
'+H7039700000001/$99999999I051' -match $regex # FALSE
'+K122005962050171/120911234C117' -match $regex # FALSE
# This regex matches all your sample input.
$regex = '^(\+)([a-zA-Z]\d{3})(\w{1,13})(\d)(/)([\d{5}|\$])(\w{0,13})([A-L]\d{2})(\w)$'
'+H124005992014011/1527399999999I05Z' -match $regex
'+H7039700000001/$99999999I051' -match $regex
'+K122005962050171/120911234C117' -match $regex
使用Powershell(它使用与C#相同的正则表达式引擎,因此非常适合微调正则表达式!),您可以看到输出。
我不明白你的问题是什么。你能说得更具体些吗?您的正则表达式可能更好,但是如果您不使用它来验证输入,而只是提取数据,那么它应该可以工作。您只需再添加两个组即可捕获最后的部分。但是“\”将“$”作为文字转义,因为有时字符串中不存在julian日期我的意思是您的书面描述与正则表达式不匹配-您的书面描述中没有提到$符号…我忘了这一点,抱歉:)这是我第一次真正以自定义方式使用regex。在此之前,我只使用过泛型模式。