如何过滤字符串模式以匹配文本行中的正则表达式?

2024-10-01 09:38:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要用python匹配给定文本中的正则表达式模式。在

正文是:

  """

       2010 Toyota FJ Cruiser FJ CRUISER

       Int. Color:

       Ext. Color:

       Black

       Trans:

       Automatic

       VIN:

        JTEZU4BF7AK009445  


      Stock:

      122821B

      DIFFERENTIALBLACK

     Status:

     Body Style: 
     SUV
     Engine:
     Gas V6 4.0L/241
                                             Dealership: Universal Toyota



    $29,988*
                                             Price

     View More Information


     Compare?

    """

从本文中我需要提取“JTEZU4BF7AK009445”(长度为17)此模式在vin之后:可能

我用这个模式

^{pr2}$

差分黑不应匹配

以及我使用的模式

       price_pat = re.compile('(\$[0-9\,\.]+)')

以匹配价格范围(“$”符号+值)

在这里,我需要检查这个价格匹配模式只在出现VIN模式的50个字符之前和之后。 因为在某些情况下,我有更高的价格价值观。所以,我需要过滤该VIN模式存在的50个字符之前和50个字符之后的文本

Plz应该怎么做?在


Tags: 文本trans模式价格extcolorintblack
3条回答

一个肮脏的黑客,但它会起作用的。在

import re
st = "....your string...."
x = re.findall(r"VIN:([^Stock]+)",st)
y = "".join(x)
y.strip(" \n")
print y

输出='JTEZU4BF7AK009445'

首先,让我们通过将所有空白规范化为一个空格符号来简化文本:

t2 = re.sub(r'[\n\t\ ]+', ' ', t)  # t is your original text

这使得查找车辆识别码(VIN)变得更容易:

^{pr2}$

然后您可以在字符串中获取VIN:的位置,并将VIN_position-50,VIN_position+50传递到.findall方法:

r2 = re.compile('(\$[0-9\,\.]+)')
r2.findall(t2, t2.find('VIN:') - 50, t2.find('VIN:') + 50)
Out[4]: []

在您的文本中,价格从VIN起超过50个字符,即,您需要扩展此边界(100个工作正常):

r2.findall(t2, t2.find('VIN:') - 100, t2.find('VIN:') + 100)
Out[5]: ['$29,988']

如果您不必使用regex(它们是a**中的一个难题),我推荐以下解决方案:

yourstr = """ ... whatever ... """

lst = yourstr.split()
vin = lst[lst.index('VIN:') + 1]
price = [i for i in lst if '$' in i][0]

我希望这足够了!在

相关问题 更多 >