正则表达式匹配特定长度的字符串与中间的空白区域(任何地方)

时间:2016-04-08 14:24:57

标签: regex

我需要一个匹配短语(具有特定长度和结构)的正则表达式,即使中间(任何地方)有额外的空白区域。

我们说我们有一些描述:

Serial numbers: ABC1234567890 XYZ0987654321

然后我们想要查找与正则表达式[A-Z]{3}[0-9]{10}匹配的所有短语,但由于外部服务的处理,该描述格式不正确。该服务将描述拆分为块,每个12位。所以它将是:

Serial numbe
rs: ABC12345
67890 XYZ098
7654321

重要:"序列号:"没有修复,它可以是所有内容,因此可以将所需的短语拆分到任何地方(ABC1 234567890ABC1234567 890等)。新的行和空格与短语匹配视角具有相同的含义,但在特殊情况下,短语的各个部分之间可能会有更多的白色字符(例如,空格作为块的最后一个字符+新行,源描述中有多个空格)。它只是应该对待整个"白色空间"在两个字符串之间作为1个空格(ABC1 234567890 = ABC1234 567890,也有新的换行符)。这些连续出版物可能是格式错误的描述中的任何地方(正如我写的:"序列号:"部分是可选的,可以是任何东西),也可以在描述中有更多的序列号。 [A-Z]{3}[0-9]{10}也只是一个例子,我想知道如何在中间实现与可选空格的匹配,但基本正则表达式可以是不同的。

预期结果:匹配短语的集合(示例中的序列号)。

ABC1234567890
XYZ0987654321

信息:结果可以在短语中包含白色字符(从上面的例子可以是:ABC12345 67890XYZ098 7654321)。最重要的是匹配基本短语(序列号)。

是否可以制作匹配它的正则表达式?我认为在没有正则表达式的情况下匹配它是相当简单的算法,但也许它可以用正则表达式来完成并使它成为" oneliner"。

2 个答案:

答案 0 :(得分:0)

这将多次处理多个空格

(([A-Z]\s*){3}([0-9]\s*){10})

将匹配AB C A A A A AD E12 34567890 因为AD E12 34567890适合模式

https://regex101.com/r/bK3sF8/1

答案 1 :(得分:0)

编辑:

在此处的单词内外考虑一个(您可以调整倍数) \n(断行):([\w\n?]*)

您应该尝试对结果进行分组

在这种情况下:

  

/(([\w\n?]*)\s([\w\n?]*):\s([\w\n?]*)\n?\n?\s([\w\n]*))/ig

您可以按团体$ 3和$ 4

获取序列号

http://regexr.com/3d67n