正则表达式不能正常工作

时间:2013-06-18 08:39:06

标签: regex

我正试图赶上正则表达式,我已经制作了如下所示;

^(.){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 时间和取决于变化,更多重复。

可能是什么问题?

4 个答案:

答案 0 :(得分:3)

一些建议/意见:

  • 您可以删除所有{1},但他们不会做任何事情。
  • [A,K]表示“A,K”。如果您想匹配AK之间的任何字母,请使用[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); *$

in action on regex101.com

答案 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};$