2014-06-08 65 views
2

基本上,我從網站上刮下了一些網球比分,並將它們轉儲到字典中。但是,tiebreak集的分數會返回爲「63」和「77」。我希望能夠在6或7之後添加開始括號,並在整個數字的末尾關閉括號。所以僞代碼的例子是:替換字符串中的結尾數字python

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

後的6或7可以從0一個或兩位數字開始(極不可能的,這將是一個3位數的號碼,所以我留下可能性不大)。我嘗試閱讀Python網站上的一些正則表達式文檔,但在解決這個問題時遇到了麻煩。謝謝。

+0

字符串是否始終以6或7開頭?從來沒有9? – zx81

+0

是的,總是6或7. – user3685742

+0

謝謝你讓我們知道。 :) – zx81

回答

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組用括號括起來。

+0

+1,很好,很好解釋。 –

+0

@CTZhu謝謝,很高興再次見到你。 :) – zx81

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' 
1

而就在第二和最後的位置添加兩個括號?似乎太容易了:

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