我需要一个匹配短语(具有特定长度和结构)的正则表达式,即使中间(任何地方)有额外的空白区域。
我们说我们有一些描述:
Serial numbers: ABC1234567890 XYZ0987654321
然后我们想要查找与正则表达式[A-Z]{3}[0-9]{10}
匹配的所有短语,但由于外部服务的处理,该描述格式不正确。该服务将描述拆分为块,每个12位。所以它将是:
Serial numbe
rs: ABC12345
67890 XYZ098
7654321
重要:"序列号:"没有修复,它可以是所有内容,因此可以将所需的短语拆分到任何地方(ABC1 234567890
,ABC1234567 890
等)。新的行和空格与短语匹配视角具有相同的含义,但在特殊情况下,短语的各个部分之间可能会有更多的白色字符(例如,空格作为块的最后一个字符+新行,源描述中有多个空格)。它只是应该对待整个"白色空间"在两个字符串之间作为1个空格(ABC1 234567890
= ABC1234 567890
,也有新的换行符)。这些连续出版物可能是格式错误的描述中的任何地方(正如我写的:"序列号:"部分是可选的,可以是任何东西),也可以在描述中有更多的序列号。 [A-Z]{3}[0-9]{10}
也只是一个例子,我想知道如何在中间实现与可选空格的匹配,但基本正则表达式可以是不同的。
预期结果:匹配短语的集合(示例中的序列号)。
ABC1234567890
XYZ0987654321
信息:结果可以在短语中包含白色字符(从上面的例子可以是:ABC12345 67890
和XYZ098 7654321
)。最重要的是匹配基本短语(序列号)。
是否可以制作匹配它的正则表达式?我认为在没有正则表达式的情况下匹配它是相当简单的算法,但也许它可以用正则表达式来完成并使它成为" oneliner"。
答案 0 :(得分:0)
这将多次处理多个空格
(([A-Z]\s*){3}([0-9]\s*){10})
将匹配AB C A A A A AD E12 34567890
因为AD E12 34567890
适合模式
答案 1 :(得分:0)
在此处的单词内外考虑一个(您可以调整倍数) \n
(断行):([\w\n?]*)
您应该尝试对结果进行分组
在这种情况下:
/(([\w\n?]*)\s([\w\n?]*):\s([\w\n?]*)\n?\n?\s([\w\n]*))/ig
您可以按团体$ 3和$ 4
获取序列号