仅当数字周围没有引号时才使用正则表达式捕获数字

Use regex to capture numbers only if they don't have quotes around

我是一个正则表达式新手,处在一个对我来说很奇怪的情况中。我正在尝试匹配所有不在引号内的单位数字(特别是 1-9,我不需要零)。

例如,假设我有以下字符串:"1" or 1 ?

我需要匹配 1 但不是 "1"

有什么想法吗?

我会在 Python 中解释:

import re
pattern = re.compile('(?<!"|\d)\d(?!"|\d)')
print(pattern.findall('1,"2",34,5'))
# ['1', '5']

这个正则表达式 ((?<!"|\d)\d(?!"|\d)) 的关键部分是负向前瞻 (?!) 和负向后视 (?<!)。它们都用于防止正则表达式引擎匹配固定长度的字符串。

可以在以下位置找到更多说明:http://www.regular-expressions.info/lookaround.html