我有以下短语列表:
[
'This is erleada comp. recub. con película 60 mg.',
'This is auxina e-200 uicaps. blanda 200 mg.',
'This is ephynalsol. iny. 100 mg.',
'This is paracethamol 100 mg.'
]
Run Code Online (Sandbox Code Playgroud)
我需要得到以下结果:
[
'This is erleada.',
'This is auxina.',
'This is ephynalsol.',
'This is paracethamol.'
]
Run Code Online (Sandbox Code Playgroud)
我编写了以下函数来清理短语:
def clean(string):
sub_strings = [".","iny","comp","uicaps]
try:
string = [string[:string.index(sub_str)].rstrip() for sub_str in sub_strings]
return string
except:
return string
Run Code Online (Sandbox Code Playgroud)
并按如下方式使用它:
for phrase in phrases:
drug = clean(phrase)
Run Code Online (Sandbox Code Playgroud)
这应该这样做:
import re
phrases = [
'This is erleada comp. recub. con película 60 mg.',
'This is auxina e-200 uicaps. blanda 200 mg.',
'This is ephynalsol. iny. 100 mg.',
'This is paracethamol 100 mg.'
]
pattern = re.compile("^This is \w*")
for phrase in phrases:
match = pattern.search(phrase)
print(match.group(0) + ".")
Run Code Online (Sandbox Code Playgroud)
输出:
This is erleada.
This is auxina.
This is ephynalsol.
This is paracethamol.
Run Code Online (Sandbox Code Playgroud)
说明:
您会看到我们使用了正则表达式模式^This is \w*。下面是它的工作原理。
^表示行的开始。所以^This is意味着你的行必须以This is.\w匹配以下单个字符范围a-z, A-Z, 0-9, 和_\w*在上一点中,我说\w匹配a-zA-Z0-9_范围内的单个字符。请注意,有一个*after \w。*代表零个或多个。如果使用*after \w,它将匹配所有满足\w并放置的字符一个接一个。^This is表示开头This is并\w*表示匹配范围内的所有字符\w。由于空格,逗号,\w句号不满足于,它将在该点停止匹配并返回类似This is something.