regex 不使用负先行查找的4位数字求反的正则表达式

mqxuamgl  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(88)

我已经尝试了许多可能的正则表达式解决方案,以识别不以4位数字和连字符开头的行,而不使用负向前看。我试图在filebeat中配置的正则表达式,用于识别不以年份和连字符开头的行。一个例子可以是2023-
一个负前瞻的正则表达式是^((?!(^[0-9]{4}-$)).)*$,它可以作为识别问题的开始。关于这方面的任何帮助都可以在没有负面前瞻的情况下完成。

wh6knrhe

wh6knrhe1#

^(?:.{0,3}(?:[^\d\n]|$)|\d{4}(?:[^-\n]|$)).*

字符串
第一个替换匹配前4个字符中有一个不是数字的字符串。第二个选择匹配4位数字,后面不跟连字符。
DEMO

tktrz96b

tktrz96b2#

这里有两个Python的例子。一个用于匹配日期,另一个用于不匹配日期:

import re

examples = ["2023-12-25 is my favourite day of the year", "I like to eat candy", "2001- a space odyssey was released in 1968", "1969 was a great year for dad rock"]

date_pattern = r"^\d{4}-.*"

anti_date_pattern = r"^\D+.*|^\d{4}[^-].*"

start_with_year_dash = [re.findall(date_pattern, example) for example in examples if re.findall(date_pattern, example)] # [['2023-12-25 is my favourite day of the year'], ['2001- a space odyssey was released in 1968']]
dont_start_with_year_dash = [re.findall(anti_date_pattern, example) for example in examples if re.findall(anti_date_pattern, example)] # [['I like to eat candy'], ['1969 was a great year for dad rock']]

字符串

相关问题