解析所有行的Regex以字母数字代码开始,以pri结束

2024-03-29 11:09:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个小python脚本来解析一个大型数据文档的所有行。你知道吗

我收集了一些类型的行:

LLNNNLL[混合数据和数字]1.650,00

NNNNNN-LNN[混合数据和数字]49,00

LLNNNL[混合数据和数字]208,00

LLNNNLLL[混合数据和数字]3,00

这是我的正则表达式模式:pattern = "^([A-Z\-0-9]){4,10}.*\d+,\d{2}" 有没有更准确的方法? 我怎样才能指定每一行必须至少有数字和字母?你知道吗


Tags: 数据方法文档脚本类型字母模式数字
1条回答
网友
1楼 · 发布于 2024-03-29 11:09:41

how can I specify that each row must have at least numbers AND letter?

这可以通过正面表情来实现。你知道吗

pattern = "^(?=[^A-Z]*[A-Z])(?=\D*\d)[A-Z0-9-]{4,10}.*\d+,\d{2}"

(?=[^A-Z]*[A-Z])将在字符串的开头触发,并且需要字符串中至少有一个A-Z字母。(?=\D*\d)也会被触发(在前面的lookahead返回true之后),并且至少需要一个数字。如果字符串中没有数字,则匹配将失败(找不到匹配项)。你知道吗

另外,如果数字必须在“行”的末尾,则添加$锚点(字符串的结尾)。你知道吗

此外,请注意,.*将“吃掉数字(应该与\d+,\d{2}匹配),直到逗号前的数字,因为.*模式是贪婪的。这里没有区别,除非你想捕捉浮点数。然后,使用延迟匹配.*?。你知道吗

如果模式不区分大小写,则在编译模式时使用不区分大小写的标志re.I,或者在模式开头添加(?i)内联修饰符。你知道吗

更新

如果要将条件限制为第一个非空白块,可以使用

^(?=[0-9-]*[A-Z])(?=[A-Z-]*\d)[A-Z0-9-]{4,10}.*\d+,\d{2}
    ^^^^^^^         ^^^^^^^

其中,我们检查可选的0+数字/连字符后面是否有字母,以及0+字母或连字符后面是否有数字(请参见demo),或者

^(?=\S*[A-Z])(?=\S*\d)[A-Z0-9-]{4,10}.*\d+,\d{2}

我们检查0+非空白字符(\S*)后的字母和数字。见another demo

相关问题 更多 >