所以目前我有字符串
'JavaScript:doEdit('41228', '', '', 2);'
我想在python上使用正则表达式来过滤掉只有41228.我已经尝试了两种方法,并在两者上提出了问题。第一个是尝试使用
查找长度为5的数字re.sub('^\d{5}', string )
然后我尝试了re.match和re.compile,它给了我错误TypeError:&:'str'和'int'的不支持的操作数类型。
我唯一接近的事情就是使用re.sub {'\ D',string}但是它会坚持我不想要的额外2。
我想在字符串中找到第19到第24个字符不是问题。因为字符串永远不会改变组成。当我生成一个新的id。
已解决:工作代码是
screen_id = 'JavaScript:doEdit('41228', '', '', 2);'
reduced_screenc_id = re.search(r'\d{5}', screenc_id)
print (reduced_screenc_id.group())
答案 0 :(得分:3)
使用C:\Program Files (x86)\Lua\5.1\clibs\socket\core.dll
查找字符串中模式的所有(非重叠)实例:
re.findall
您可能希望使用>>> import re
>>> string = "JavaScript:doEdit('41228', '', '', 2);"
>>> pattern = '\d{5}' # 5 digits
>>> number = re.findall(pattern, string)[0]
>>> number
'41228'
然后将“数字”转换为实际数字。
答案 1 :(得分:0)
如果您的字符串始终采用此格式,则可以使用仅'
的分割操作:
s = "JavaScript:doEdit('41228', '', '', 2);"
print(s.split("'")[1])
# => 41228
如果您打算学习正则表达式,可以将re.search
用于\d{5}
或doEdit'(\d{5})'
正则表达式。
import re
s = "JavaScript:doEdit('41228', '', '', 2);"
res = re.search(r"\d{5}", s)
if res:
print(res.group()) # Here, we need the whole match
res = re.search(r"doEdit\('(\d{5})'", s)
if res:
print(res.group(1)) # Grabbing Group 1 value only
由于您只需要第一场比赛,因此使用re.findall
无效。
请参阅this Python demo。