2024-03-29 11:09:41 发布
网友
我编写了一个小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}" 有没有更准确的方法? 我怎样才能指定每一行必须至少有数字和字母?你知道吗
pattern = "^([A-Z\-0-9]){4,10}.*\d+,\d{2}"
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之后),并且至少需要一个数字。如果字符串中没有数字,则匹配将失败(找不到匹配项)。你知道吗
(?=[^A-Z]*[A-Z])
A-Z
(?=\D*\d)
另外,如果数字必须在“行”的末尾,则添加$锚点(字符串的结尾)。你知道吗
$
此外,请注意,.*将“吃掉数字(应该与\d+,\d{2}匹配),直到逗号前的数字,因为.*模式是贪婪的。这里没有区别,除非你想捕捉浮点数。然后,使用延迟匹配.*?。你知道吗
.*
\d+,\d{2}
.*?
如果模式不区分大小写,则在编译模式时使用不区分大小写的标志re.I,或者在模式开头添加(?i)内联修饰符。你知道吗
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
\S*
这可以通过正面表情来实现。你知道吗
(?=[^A-Z]*[A-Z])
将在字符串的开头触发,并且需要字符串中至少有一个A-Z
字母。(?=\D*\d)
也会被触发(在前面的lookahead返回true之后),并且至少需要一个数字。如果字符串中没有数字,则匹配将失败(找不到匹配项)。你知道吗另外,如果数字必须在“行”的末尾,则添加
$
锚点(字符串的结尾)。你知道吗此外,请注意,
.*
将“吃掉数字(应该与\d+,\d{2}
匹配),直到逗号前的数字,因为.*
模式是贪婪的。这里没有区别,除非你想捕捉浮点数。然后,使用延迟匹配.*?
。你知道吗如果模式不区分大小写,则在编译模式时使用不区分大小写的标志
re.I
,或者在模式开头添加(?i)
内联修饰符。你知道吗更新
如果要将条件限制为第一个非空白块,可以使用
其中,我们检查可选的0+数字/连字符后面是否有字母,以及0+字母或连字符后面是否有数字(请参见demo),或者
我们检查0+非空白字符(
\S*
)后的字母和数字。见another demo相关问题 更多 >
编程相关推荐