基本上,我从一个网站上抓取了一些网球比分并将它们丢入字典中。但是,抢七局的得分会像" 63"和" 77"。我希望能够在6或7之后添加一个起始括号,并在整个数字的末尾关闭括号。所以伪代码示例是:
>>>s = '613'
>>>s_new = addParentheses(s)
>>>s_new
6(13)
6或7之后的数字可以是从0开始的一位或两位数字(极不可能是3位数字,所以我将这种可能性排除在外)。我尝试阅读Python网站上的一些正则表达式文档,但在将此问题纳入此问题时遇到了问题。感谢。
答案 0 :(得分:4)
如果字符串始终以6
或7
开头,那么您需要查找以下内容:
result = re.sub(r"^([67])(\d{1,2})$", r"\1(\2)", subject)
解释正则表达式
^ # the beginning of the string
( # group and capture to \1:
[67] # any character of: '6', '7'
) # end of \1
( # group and capture to \2:
\d{1,2} # digits (0-9) (between 1 and 2 times
# (matching the most amount possible))
) # end of \2
$ # before an optional \n, and the end of the
# string
替换字符串"\1(\2)
连接捕获组1并在括号之间捕获组2.
答案 1 :(得分:1)
这样的事情:
def addParentheses(s):
if not s[0] in ('6','7'):
return s
else:
temp = [s[0], '(']
for ele in s[1:]:
temp.append(ele)
else:
temp.append(')')
return ''.join(temp)
演示:
>>> addParentheses('613')
'6(13)'
>>> addParentheses('6163')
'6(163)'
>>> addParentheses('68')
'6(8)'
>>> addParentheses('77')
'7(7)'
>>> addParentheses('123')
'123'
答案 2 :(得分:1)
只需在第2位和最后位置添加两个括号?似乎太容易了:
In [42]:
s = '613'
def f(s):
L=list(s)
L.insert(1,'(')
return "".join(L)+')'
f(s)
Out[42]:
'6(13)'
或只是''.join([s[0],'(',s[1:],')'])
如果您的情况很简单,那就选择一个简单的解决方案,这会更快。解决方案越普遍,它可能越慢:
In [56]:
%timeit ''.join([s[0],'(',s[1:],')'])
100000 loops, best of 3: 1.88 µs per loop
In [57]:
%timeit f(s)
100000 loops, best of 3: 4.97 µs per loop
In [58]:
%timeit addParentheses(s)
100000 loops, best of 3: 5.82 µs per loop
In [59]:
%timeit re.sub(r"^([67])(\d{1,2})$", r"\1(\2)", s)
10000 loops, best of 3: 22 µs per loop