替换字符串python中的结束号

时间:2014-06-08 04:25:03

标签: python regex

基本上,我从一个网站上抓取了一些网球比分并将它们丢入字典中。但是,抢七局的得分会像" 63"和" 77"。我希望能够在6或7之后添加一个起始括号,并在整个数字的末尾关闭括号。所以伪代码示例是:

>>>s = '613'
>>>s_new = addParentheses(s)
>>>s_new
6(13)

6或7之后的数字可以是从0开始的一位或两位数字(极不可能是3位数字,所以我将这种可能性排除在外)。我尝试阅读Python网站上的一些正则表达式文档,但在将此问题纳入此问题时遇到了问题。感谢。

3 个答案:

答案 0 :(得分:4)

如果字符串始终以67开头,那么您需要查找以下内容:

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