meds = [ "tuberculin Cap(s)", "tylenol Cap(s)", "tramadol 2 Cap(s)"]
for i in meds:
new_meds = i.replace(" Cap(s)", " 1 Cap(s)")
print(new_meds)
输出为:
^{pr2}$
我想把所有的药都换成1个 前2次给药正确,第3次给药后出现“曲马多21帽”。在
我应该如何更正我的脚本,以使字符串中带有数字的所有药品都不会被修改?在
最终的结果应该是只有“结核菌素帽”、“泰诺帽”这样的药物被修改,而不是“曲马多2帽”。在
可以通过以下方式使用RegEx:
输出:
^{pr2}$表达式
".+\d.+"
将找到具有“something+digit+something”的项。在可以将正则表达式与re module:
以上图片
^{pr2}$按要求分解:
你好像不熟悉list comprehensions。在python中,任何iterable都可以循环,就像对for循环所做的那样。此外,您可以使用列表理解:
这将打印
['one', 'two', 'three']
。在现在到regular expression。
正则表达式中的方括号(集)表示“选择其中的任何字符”。因此,集合}。
[ab]
将同时匹配a
和{在集合中,可以有范围。}(包括在内)的任何字符。
[a-e]
匹配从a
到{regex中的A
+
表示“左边的一个或多个”-[ab]+
因此将匹配1个或多个A和/或b的任何组合。\d
匹配任何数字(可替换为[0-9])。任何在正则表达式中有特殊含义的字符,如表示组的“(”或“)”必须是escaped或放在方括号内才能匹配。
我的regex有三个主要部分:}。组合匹配项:
[a-z]+
,\d+
和{“一个或多个字母后跟空格”+“一个或多个数字后跟空格”+“文本‘大写字母’”。在
re.findall(pattern, string)
返回一个列表,其中包含在string
中找到的pattern
的所有匹配项。它的长度是0
,因此意味着没有匹配项。在你的案例中,这意味着没有“药物名称”+编号+“上限”。在虽然只需检查字符串是否包含任何数字就可以实现相同的输入,但这可以确保它遵循“word+number+'Cap(s)”的显式模式。在
允许在药物名称中使用数字
如果您想允许任何序列作为药物名称(例如,带有数字的分子式),您可以将regex更改为
[a-zA-Z\d]+ \d+ Cap\(s\)
,允许任何小写或大写字母以及数字作为名称的一部分。在使用for循环
如果您想在不使用列表理解的情况下更清楚地编写代码,可以使用常规的
for
循环来完成:注意,要在
for
循环中更改列表中的值,您需要要更改的元素的索引(因此是enumerate)。如果您觉得enumerate
令人困惑,可以这样写:枚举
要扩展for循环中},而{}是{}。在
enumerate
函数的使用:enumerate
返回一个tuples列表,其中包含列表(或任何序列)中的索引以及元素:(index, element)
。在python中,可以将值解压到tuple:a,b = (1,2)
。a
现在是{使用列表理解
相关问题 更多 >
编程相关推荐