我有几个字符串如下所示:
+ H124005992014011 / 1527399999999I05Z
+ H7039700000001 / $ 99999999I051
+ K122005962050171 / 120911234C117
我需要将每个部分拆分成自己的变量。要做到这一点,我认为Regex将是最好的方式。
这是分裂的规则。
我有以下正则表达式模式似乎与字符串匹配,但我不确定如何将这个完整模式转换为字符串和分割这些字符串的强大方法....
(^\+)(\D\d\d\d)(\w{1,13})(\d)(\/)(\d{5}|\$)(\w{0,13})\D\d\d\w$
我需要将上面的模式转换为允许我提取每个匹配部分屏幕的表单。
提前致谢
答案 0 :(得分:2)
您需要了解capturing groups。基本上,用括号括起你关心的每个“组”。然后你可以按顺序引用这些组。
要在C#中使用捕获组,请参阅this question。
您描述的正则表达式与您的输入不完全匹配 - 请参阅以下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#相同的正则表达式引擎,因此非常适合微调正则表达式!),您可以看到输出。