python regex保留一个字符的最后两次出现之间的文本

1 人关注

正如标题所说,我想提取一个字符串中最后两次出现的字符之间的文本。

'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*.*-,但它匹配了第一个和最后一个-之间的一切。应该使用什么正确的词组?

1 个评论
你可以使用 split('-') 并从结果列表中获得项目 [-2] 。但问题是你有两个不同的字符:短的 - 和长的
python
regex
Pedro Domingues
Pedro Domingues
发布于 2022-07-28
4 个回答
mozway
mozway
发布于 2022-07-28
已采纳
0 人赞同

有了搜索。

import re
[re.search(r'[-–]\s*([^-–]+?)\s*[-–][^-–]*$', x).group(1) for x in l]

Or split:

[re.split(r'\s+[-–]\s*', x, 2)[-2] for x in l]

output: ['0,6 ml 5700 IU', '0.165 ml', '10 ml', '15 g']

used input:

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

regex demo

Wiktor Stribiżew
Wiktor Stribiżew
发布于 2022-07-28
0 人赞同

你可以使用

[^-–—\s][^-–—]*?(?=\s*[-–—][^-–—]*$)

See the regex demo. 详情:

  • [^-–—\s] - a char other than whitespace, -, and
  • [^-–—]*? - zero or more chars other than -, and as few as possible
  • (?=\s*[-–—][^-–—]*$) - a positive lookahead that requires zero or more whitespaces, then a -, or char and then zero or more chars other than -, and till end of string immediately to the right of the current location.
  • RavinderSingh13
    RavinderSingh13
    发布于 2022-07-28
    0 人赞同

    只用了你显示的样本。请用Python代码尝试以下的regex,用Python3编写和测试。这里是 Online demo for used 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的re模块的findall功能。我正在使用r'(?<=\s-|\s–)(.*?)(?=-)'来获得所需的输出。然后用strip函数去除所有前导和尾部的空格,得到预期的输出。

    Gian Arauz
    Gian Arauz
    发布于 2022-07-28
    0 人赞同

    试着把最后一个破折号前的空白处也配上 -