如何用空格替换斜杠“ /”

时间:2019-09-24 14:15:07

标签: python python-3.x

我想用字符串中的空格替换“ /”,除非它在“ mg”和“ number”之间 'ABACAVIR/LAMIVUDINE/ZIDOVUDINE MYLAN 300 mg/150 mg/300 mg, comprimé pelliculé'

成为

'ABACAVIR LAMIVUDINE ZIDOVUDINE MYLAN 300 mg/150 mg/300 mg, comprimé pelliculé'

以及如何处理多行数组

['ABACAVIR / LAMIVUDINE TEVA 600 mg / 300 mg,comprimépelliculé''ABACAVIR / LAMIVUDINE ZENTIVA 600 mg / 300 mg,comprimépelliculé']

3 个答案:

答案 0 :(得分:7)

根据您的条件使用正则表达式模式。您可以使用以下构造:

  • 后面的否定断言斜杠之前不是mg
  • 否定的前瞻性断言其后的不是数字。

import re
my_string = 'ABACAVIR/LAMIVUDINE/ZIDOVUDINE MYLAN 300 mg/150 mg/300 mg, comprimé pelliculé'
print(re.sub('(?<!\bmg\b)\/(?![0-9])',' ',my_string))
#ABACAVIR LAMIVUDINE ZIDOVUDINE MYLAN 300 mg/150 mg/300 mg, comprimé pelliculé

答案 1 :(得分:3)

我想为初学者提供一个简单易读的解决方案,并且不使用任何导入模块。

在我的代码中,我只是使用for循环逐个字符地分析字符串,然后检查当前字符是否为“ /”。

我使用枚举是因为它允许我在迭代期间访问索引和当前字符的值。

如果找到“ /”,我使用Python's slicing检查“ mg”是否在其前面,并使用此信息将其替换为空白。

解决方案

data = ['ABACAVIR/LAMIVUDINE TEVA 600 mg/300 mg, comprimé pelliculé' 'ABACAVIR/LAMIVUDINE ZENTIVA 600 mg/300 mg, comprimé pelliculé']
new_data = [] 

for line in data:
    result = "" 
    for key, value in enumerate(data):
        if value == "/" and data[key-2:key] != "mg":
            result += ' '  # replace with white space
        else:
            result += value
    new_data.append(result)

print(new_data)

输出

['ABACAVIR/LAMIVUDINE TEVA 600 mg/300 mg, comprimé pelliculéABACAVIR/LAMIVUDINE ZENTIVA 600 mg/300 mg, comprimé pelliculé']

答案 2 :(得分:2)

您可以找到除/以外的所有mg/number项,然后替换它们:

import re

string = 'ABACAVIR/LAMIVUDINE/ZIDOVUDINE MYLAN 300 mg/150 mg/300 mg, comprimé pelliculé'
result = re.sub('\/[^mg\/\d+]', ' ', string)

输出:

ABACAVIR AMIVUDINE IDOVUDINE MYLAN 300 mg/150 mg/300 mg, comprimé pelliculé