Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用正则表达式提取字符串的部分_C#_.net_Regex - Fatal编程技术网

C# 使用正则表达式提取字符串的部分

C# 使用正则表达式提取字符串的部分,c#,.net,regex,C#,.net,Regex,我有几个字符串,如下所示: +H124005992014011/152739999999I05Z +H703970000001/$9999999 I051 +K12200596205171/120911234C117 我需要将每个部分拆分为自己的变量。要做到这一点,我认为正则表达式是最好的方法 以下是拆分的规则 第一个字符必须是“+” 第二部分必须有一个alpha字符,后跟三位数字。i、 e.H124、H703、K122 第三部分是一组字母数字字符(长度为1到13个字符) 第四部分是一个十进制

我有几个字符串,如下所示:

+H124005992014011/152739999999I05Z

+H703970000001/$9999999 I051

+K12200596205171/120911234C117

我需要将每个部分拆分为自己的变量。要做到这一点,我认为正则表达式是最好的方法

以下是拆分的规则

  • 第一个字符必须是“+”
  • 第二部分必须有一个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。在此之前,我只使用过泛型模式。