Python正则表达式被动组和Lookbehind

Python正则表达式被动组和Lookbehind,python,regex,Python,Regex,我有一个字符串: # print thestring abcd\t$500\n 我想提取不带美元符号的500美元值 这是我的密码: # trying positive lookbehind m = re.search('(<=\$)\d+$',thestring) # trying passive groups m = re.search('(?:\$)\d+$',thestring) #尝试正面查找 m=re.search(“(首先,您应该避开反斜杠或使用原始字符串: '(<=

我有一个字符串:

# print thestring
abcd\t$500\n
我想提取不带美元符号的500美元值

这是我的密码:

# trying positive lookbehind
m = re.search('(<=\$)\d+$',thestring)
# trying passive groups
m = re.search('(?:\$)\d+$',thestring)
#尝试正面查找

m=re.search(“(首先,您应该避开反斜杠或使用原始字符串:

'(<=\\$)\\d+$'

然后使用
m.group(1)
检索您的号码。非捕获组不会从匹配的子字符串中删除结果,因此这就是第二个解决方案不起作用的原因。第一个解决方案应该起作用,但您似乎键入了正查找的语法。应该是:

(?<=\$)\d+$

(?出于好奇,非捕获组的目的是什么?@Abdulla非捕获组将内容分组在一起,但不存储结果。它比捕获组快。仅当需要重用此组的内容时才使用捕获组。如果需要以需要分组的方式修改正则表达式,它们也很有用,但我不想影响现有组的编号。为什么要有两个反斜杠?一个似乎可以。对不起,我对regex很陌生。是的,因为你很幸运,“\$”和“\d”都不是有效的转义序列。但是如果你键入“\n”,你会在你的In中得到一个换行符,而不是斜杠和“n”。-在teractive python shell,计算一个未转义的字符串。解释器将以转义方式返回它。
\n
实际上不是问题,因为转义序列可以转换为python换行符。
\b
是一个更好的例子-作为正则表达式,它表示“单词边界”,在字符串中,它表示“退格”。有关详细信息,请参阅。
m = re.search('\\$(\\d+)',thestring)
(?<=\$)\d+$