2017-02-17 74 views
1

在隨機字符串中,我需要找到一個匹配給定模式的字符串,並在此字符串後面加上;。我認爲我應該使用re來做到這一點,但我並不熟悉它。找到一個匹配給定模式的字符串,並使用Python的re模塊分隔線

例輸入:

this is the first part of string 1/32 part this is the second part of string 

結果,我需要把;1/32 part後,如

this is the first part of string 1/32 part; this is the second part of string 

我知道我應該用re,我知道我可能應該使用re.match與看起來像[1-1000]/[1-1000]\spart模式,但我不知道從哪裏去。

編輯:1/32就是一個例子,它可以65/1231/36/7

+0

爲什麼'[1-1000]'?你確切的要求是什麼?如果有'/'還有沒有關係? –

+5

注意'[1-1000]'是一個*字符組*,因此只會匹配'0'和'1'... –

+0

您只需要匹配'\ d +/\ d + \ s + part' – anubhava

回答

4

你的用例被稱爲替代。這正是re.sub功能的用途。

import re 

s = "bla 1/6 part bla bla 76/88 part 12345/12345 part bla" 
print(s) 
s = re.sub(r'(\b\d{1,4}/\d{1,4} part)', r'\1;', s) 
print(s) 

的這個輸出是

bla 1/6 part; bla bla 76/88 part; 12345/12345 part bla 

part最後一次發生後,失蹤;

我用{} quantifiers限制分數的分子和分母爲4個十進制數字,這是你提到的[1-1000]表示法。它可以更好地近似爲1?\d{1,3}(但是這也不完全相同,它也允許例如1999/1999[1]


[1] P.S.tripleee commented一樣,十進制數的範圍從1到1000的確切正則表達式是[1-9]([0-9][0-9]?)?|1000,它看起來有點複雜,但如果您將唯一的4位數字1000分開,並使用多餘的一對圓括號1至3位數字部分:[1-9]([0-9]([0-9])?)?。另一個選項是對[0-9]使用字符類快捷鍵\d,從而產生[1-9]\d{0,2}|1000

編輯:

  • 相結合的比賽分組。
  • 在分子之前添加了錨點。
+0

謝謝。解決了我的問題:) – krizz

4

您只需要使用re.matchre.subre模塊,用下面的正則表達式

import re 

my_str = 'this is the first part of string 1/32 part this is the second part of string' 
my_regex = r'(\d+/\d+\s+part)' 

if re.match(my_regex, my_str): 
    print(re.sub(my_regex, r'\1,', my_str)) # this will print: 1/32 part, 
    # ... 

裸沿如果需要多行來匹配相同的正則表達式,則需要向正則表達式添加一些額外的標誌。請參閱here此類標誌的列表。

你可以看到正則表達式here


快速更換(有可能是更好的方式)將也部分之前和所需的匹配部分匹配後,做一些事情,如:

import re 

my_str = 'this is the first part of string 1/32 part this is the second part of string' 
my_regex = r'(.*)(\s+\d+/\d+\s+part)(.*)' 

condition = re.match(my_regex, my_str) 

if condition: 
    part = re.sub(my_regex, r'\2,', my_str) 

x = condition.group(1) + part + condition.group(3) 
print(x) 

將輸出修改後的字符串:

這是串1/32的第一部分某種程度上,這是 串的第二部分

與所有的一個簡單的聯機功能上面會:

import re 


def modify_string(my_str, my_regex): 
    return re.sub(my_regex, r'\1,', my_str) 

if __name__ == '__main__': 
    print(modify_string('first part of string 1/32 part second part of string', r'(\d+/\d+\s+part)')) 

但我建議你保持狀態。 以防萬一

+0

如何在my_str中替換它,所以它在'part'之後包含','? – krizz

相關問題