查找模式前面没有数字的正则表达式匹配
Find regex match without a digit preceding the pattern
我目前正在尝试从字符串中提取日期。这里有几个例子:
02.10 abcdef -> extract '02.10'
abcdef 03.12 -> extract '03.12'
abcdef 308.56 -> extract nothing
一个简单的正则表达式,例如 (\d{2}.\d{2})
对于前两种情况工作正常,但我发现第三个示例的误报,即正则表达式 returns 08.56
,这是有道理的。
有什么办法可以防止这个字符串被提取出来吗?我试过 [^0-9](\d{2}.\d{2})
似乎在正则表达式调试网站上工作但当我将它编译为 python 正则表达式时却没有
import re
regex = re.compile(r'[^0-9](\d{2}.\d{2})')
提前致谢
我一开始以为您需要完整的数字,这可以通过以下方式实现:
(\d*\.\d{2})
其中 returns 308.56
但随后看到了一行:
Is there any way to prevent this string from being extracted?
Which made me expect you want only two numbers, a dot and again two numbers. Otherwise the regex should return nothing.
那么答案应该是:
(?<![\w\d])(\d{2}\.\d{2})(?![\w\d])
上进行测试
我目前正在尝试从字符串中提取日期。这里有几个例子:
02.10 abcdef -> extract '02.10'
abcdef 03.12 -> extract '03.12'
abcdef 308.56 -> extract nothing
一个简单的正则表达式,例如 (\d{2}.\d{2})
对于前两种情况工作正常,但我发现第三个示例的误报,即正则表达式 returns 08.56
,这是有道理的。
有什么办法可以防止这个字符串被提取出来吗?我试过 [^0-9](\d{2}.\d{2})
似乎在正则表达式调试网站上工作但当我将它编译为 python 正则表达式时却没有
import re
regex = re.compile(r'[^0-9](\d{2}.\d{2})')
提前致谢
我一开始以为您需要完整的数字,这可以通过以下方式实现:
(\d*\.\d{2})
其中 returns 308.56
但随后看到了一行:
Is there any way to prevent this string from being extracted? Which made me expect you want only two numbers, a dot and again two numbers. Otherwise the regex should return nothing.
那么答案应该是:
(?<![\w\d])(\d{2}\.\d{2})(?![\w\d])
上进行测试