提取字符串第一部分的正则表达式

Flu*_*uxy 1 python regex

我有以下短语列表:

[
  '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)

tbj*_*rch 5

这应该这样做:

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.