我需要在给定的文本中使用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之后添加此模式:

我用这种模式

        vin_pattern = re.compile('([A-Z0-9]{17})')
        vin = re.findall(vin_pattern,text)

        ["JTEZU4BF7AK009445","DIFFERENTIALBLACK"]


但是DIFFERENTIALBLACK不应该匹配

以及我使用的模式

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


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

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

请问应该怎么做?

最佳答案

首先,通过将所有空格都规范化为单个空格符号来简化文本:

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


它使寻找VIN变得容易得多:

re.findall('[A-Z]{3}[A-Z0-9]{10}[0-9]{4}', t2)
Out[2]: ['JTEZU4BF7AK009445']


然后,您可以在字符串中获取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']

关于python - 如何过滤字符串模式以使其与正则表达式在文本行中匹配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8756334/

10-12 16:02