Python 如何提取不后跟关键字的数字
我想从字符串中获取十进制数,但后面不能跟'/套'.Python 如何提取不后跟关键字的数字,python,regex,Python,Regex,我想从字符串中获取十进制数,但后面不能跟'/套'. pattern = '(\d{1,}\.{0,1}\d{0,}万{0,1}-{0,1}\d{0,}\.{0,1}\d{0,}万{0,1})元{0,1}(?!/套)' string1 = 'item 1:298元/套起' string2 = 'item 1:298元/m2起' string3 = 'item 1:298/m2起' result1 = re.findall(pattern, string1) #expected [], but r
pattern = '(\d{1,}\.{0,1}\d{0,}万{0,1}-{0,1}\d{0,}\.{0,1}\d{0,}万{0,1})元{0,1}(?!/套)'
string1 = 'item 1:298元/套起'
string2 = 'item 1:298元/m2起'
string3 = 'item 1:298/m2起'
result1 = re.findall(pattern, string1) #expected [], but return ['1', '298']
result2 = re.findall(pattern, string2) #expected [298], but return ['1', '298', '2']
result3 = re.findall(pattern, string3) #expected [298], but return ['1', '298', '2']
如何得到正确答案
谢谢如果我理解正确,使用“向前看”和“向后看”是相当简单的
(?<=:)(\d+)(?!.*套) : Using positive look behind to make sure the number is preceded by a colon, doesn't include the colon in the "full match"
:(\d+)(?!.*套) : Not using positive look behind; colon is included in "full match" but not in groups
(?<=:)(\d+)(?!.*套)
(?<= : Start of positive look behind
: : String to search for
) : End of positive look behind
( : Start of capture group
\d+ : Capture any number 1 or more times
) : End of capture group
(?! : Start of negative look ahead
.* : Greedy "capture anything" before string we're trying to avoid
套 : String we're trying to avoid
) : End of negative look ahead
(?注意:
{0,1}
=?
{0,}
=*
{1,}
=+
使用
看
解释
--------------------------------------------------------------------------------
( group and capture to \1:
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
\.? '.' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
\d* digits (0-9) (0 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
万 '万'
--------------------------------------------------------------------------------
;? ';' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
-? '-' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
\d* digits (0-9) (0 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
\.? '.' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
\d* digits (0-9) (0 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
万 '万'
--------------------------------------------------------------------------------
;? ';' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
) end of \1
--------------------------------------------------------------------------------
元 '元'
--------------------------------------------------------------------------------
;? ';' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
/ '/'
--------------------------------------------------------------------------------
(?! look ahead to see if there is not:
--------------------------------------------------------------------------------
套 '套'
--------------------------------------------------------------------------------
) end of look-ahead
{0,1}可以缩写为?{0,}可以缩写为*
--------------------------------------------------------------------------------
( group and capture to \1:
--------------------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
\.? '.' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
\d* digits (0-9) (0 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
万 '万'
--------------------------------------------------------------------------------
;? ';' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
-? '-' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
\d* digits (0-9) (0 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
\.? '.' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
\d* digits (0-9) (0 or more times (matching
the most amount possible))
--------------------------------------------------------------------------------
万 '万'
--------------------------------------------------------------------------------
;? ';' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
) end of \1
--------------------------------------------------------------------------------
元 '元'
--------------------------------------------------------------------------------
;? ';' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
/ '/'
--------------------------------------------------------------------------------
(?! look ahead to see if there is not:
--------------------------------------------------------------------------------
套 '套'
--------------------------------------------------------------------------------
) end of look-ahead