正如标题所述,我想提取字符串中一个字符的最后两个字母之间的文本。
我有:
'9500 anti-Xa IU/ml - 0,6 ml 5700 IU -'
'120 mg/ml – 0.165 ml -'
'300-300-300 IR/ml or IC/ml - 10 ml -'
'Fluocortolone-21-pivalate 1 mg/g, Lidocaine hydrochloride 20 mg/g - 15 g -'
我想要:
'0,6 ml 5700 IU'
'0.165 ml'
'10 ml'
'15 g'
我尝试使用-\s*.*-
,但它匹配第一个和最后一个-
之间的所有内容。正确的正则表达式是什么?
发布于 2022-07-28 01:09:10
通过搜索:
import re
[re.search(r'[-–]\s*([^-–]+?)\s*[-–][^-–]*$', x).group(1) for x in l]
或分裂:
[re.split(r'\s+[-–]\s*', x, 2)[-2] for x in l]
输出:['0,6 ml 5700 IU', '0.165 ml', '10 ml', '15 g']
已使用的投入:
l = ['9500 anti-Xa IU/ml - 0,6 ml 5700 IU -',
'120 mg/ml – 0.165 ml -',
'300-300-300 IR/ml or IC/ml - 10 ml -',
'Fluocortolone-21-pivalate 1 mg/g, Lidocaine hydrochloride 20 mg/g - 15 g -'
]
发布于 2022-07-28 01:07:00
您可以使用
[^-–—\s][^-–—]*?(?=\s*[-–—][^-–—]*$)
见regex演示。详细信息
[^-–—\s]
-除空白、-
、–
和—
之外的字符[^-–—]*?
-除-
、–
和—
外,其他字符尽可能少。(?=\s*[-–—][^-–—]*$)
--需要零或多个空白空间,然后是-
、–
或—
字符,然后是除-
、–
和—
之外的零个或多个字符,直到当前位置右侧的字符串结束。发布于 2022-07-28 01:51:47
只有你展示的样本。请尝试使用用Python3编写和测试的Python代码执行regex。下面是用过的正则表达式的在线演示。
import re
var="""9500 anti-Xa IU/ml - 0,6 ml 5700 IU -
120 mg/ml - 0.165 ml -
300-300-300 IR/ml or IC/ml - 10 ml -
Fluocortolone-21-pivalate 1 mg/g, Lidocaine hydrochloride 20 mg/g - 15 g -"""
[x.strip(' ') for x in re.findall(r'(?<=\s-|\s–)(.*?)(?=-)',var,re.M)]
产出如下:
['0,6 ml 5700 IU', '0.165 ml', '10 ml', '15 g']
解释:使用Python3 3的re
模块的findall
函数,简单解释。其中我使用regex r'(?<=\s-|\s–)(.*?)(?=-)'
来获得所需的输出。然后删除所有带strip
函数的前导和尾随空格,以获得预期的输出。
https://stackoverflow.com/questions/73150043
复制