替换字符串中的结束数字

2024-05-20 22:04:42 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我从一个网站上搜集了一些网球分数,然后把它们丢进字典里。但是,分球组的得分返回为“63”和“77”。我希望能够在6或7后面加一个起始圆括号,并在整个数字的末尾加上圆括号。因此,伪代码示例如下:

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

6或7后面的数字可以是从0开始的一位或两位数字(极不可能是3位数字,所以我不考虑这种可能性)。我试着阅读Python网站上的一些regex文档,但在将其合并到这个问题中时遇到了问题。谢谢。你知道吗


Tags: 代码文档示例new字典网站数字可能性
3条回答

如果字符串总是以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连接在括号中。你知道吗

像这样的事情怎么样:

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'

在第二个和最后一个位置加上两个圆括号?似乎太简单了:

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

相关问题 更多 >