2017-03-25 29 views
-1

我想知道如何使用正则表达式来移除字符串的特定部分。例如,我有一个看起来像这样的列表:如何使用正则表达式去除字符串的特定部分:

name=derek; 
name=derek.1; 
name=derek.2; 
name=derek.3; 
name=ophelia; 
name=ophelia.1; 
name=ophelia.2; 
name=ophelia.3; 

我想的名字='后替换字符,要么“之间。”如果存在或';'在行末。输出应该是这样的名单:

name=apple; 
name=apple.1; 
name=apple.2; 
name=apple.3; 
name=apple; 
name=apple.1; 
name=apple.2; 
name=apple.3; 
+0

你试过什么正则表达式? – leovp

+0

我试过了:/^(.*?);/但无济于事...... – BiorAD

+0

那么你不是试图停止在';',你试图停止在';'或'.' ,所以应该清楚要做出什么改变。 –

回答

1

你需要这样的正则表达式多:

>>> print(s) 
name=derek; 
name=derek.1; 
name=derek.2; 
name=derek.3; 
name=ophelia; 
name=ophelia.1; 
name=ophelia.2; 
name=ophelia.3; 
>>> replace_with = r'\1{0}\2'.format('apple') # preserve start & end 
               # replace only the middle 
>>> regex = '^(name=)[^\.;]+(.*)$' 
>>> replaced = re.sub(regex,    # pattern 
...     replace_with,   # replacement 
...     s,     # an original multiline string 
...     flags=re.MULTILINE); # regex for multiple lines 
>>> print(replaced) 
name=apple; 
name=apple.1; 
name=apple.2; 
name=apple.3; 
name=apple; 
name=apple.1; 
name=apple.2; 
name=apple.3; 
0

这不正是你问什么,但这里并不需要正则表达式版本全部:

s = """name=derek; 
name=derek.1; 
name=derek.2; 
name=derek.3; 
name=ophelia; 
name=ophelia.1; 
name=ophelia.2; 
name=ophelia.3;""" 

lines = s.split("\n") 
updated = [] 
for line in lines: 
    left, right = line.split("=") 
    if "." in right: 
     new_right = "apple." + right.split(".")[1] 
    else: 
     new_right = "apple;" 
    updated.append(left + "=" + new_right) 

print "\n".join(updated) 
相关问题