我需要在给定的文本中使用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/