我正试图赶上正则表达式,我已经制作了如下所示;
^(.){1};(\d){4};(\d){8};[A,K]{1};(\d){7,8};(\d){8};[A-Z ]{1,};[ ,\d]{1};(\d){8};(\d){1};(\d){1}; $
,样本是;
ä;1234;00126434;K;11821111;00000000;SOME TEXT ; 0;00000000;0;0;
据我读过
。是所有字符, \ d 是数字, {n} ,变体表示 n 时间和取决于变化,更多重复。
可能是什么问题?
答案 0 :(得分:3)
一些建议/意见:
{1}
,但他们不会做任何事情。[A,K]
表示“A
,,
或K
”。如果您想匹配A
和K
之间的任何字母,请使用[A-K]
。(\d{7,8})
捕获7-8位数字; (\d){7,8}
只会捕获最后一位数字。[ ,\d]{1}
在您的正则表达式失败,因为字符串中的该点有两个字符(空格和0
)。$
之前的空格,除非在最后一个分号后字符串中确实有空格。这是一个匹配(并捕获单独组中每个元素)的版本:
^(.);(\d{4});(\d{8});([A-K]);(\d{7,8});(\d{8});([A-Z ]+);([ ,\d]+);(\d{8});(\d);(\d); *$
答案 1 :(得分:2)
请不要滥用正则表达式。
您的格式为CSV格式,只需以;
分割,并正确验证各个部分。这是完全有效的,通常效率相同,并且更容易调试。
使用正则表达式,确保正确逃脱(即双重逃脱!)。在大多数编程语言中,\
是字符串中的保留字符,您需要使用\\
来获得所需的效果。
答案 2 :(得分:1)
试试这个:
^(.){1};(\d){4};(\d){8};[A-K]{1};(\d){7,8};(\d){8};[A-Z ]{1,};[ \d]{2};(\d){8};(\d){1};(\d){1};$
这里你的正则表达式发生了什么
^(.){1};(\d){4};(\d){8};[A,K]{1};(\d){7,8};(\d){8};[A-Z ]{1,};[ ,\d]{1};(\d){8};(\d){1};(\d){1}; $
$
之前有额外空格。 -
而不是逗号,您的范围应为[A-K]
。 [ ,\d]
范围内您已将其限制为1个字符{1}
它应为{2}
一个
空格和1位数字。附加:您无需指定{1}
,因为它将默认匹配前一个令牌
答案 3 :(得分:0)
如果你的工作不起作用,你可以试试这个:
^(.){1};(\d){4};(\d){8};[A,K]{1};(\d){7,8};(\d){8};[A-Z ]{1,};( \d){1};(\d){8};(\d){1};(\d){1};$