【发布时间】:2018-09-21 06:35:35
【问题描述】:
我有一个看起来像这样的 csv 文件(显然
<anystring>tony_UPearly_start,1,2,3
<anystring>tony_UPlate_start,4,5,6
<anystring>tony_UP<anystring>_start,7,8,9
<anystring>jane_UPearly_start,1,2,3
<anystring>jane_UPlate_start,4,5,6
<anystring>jane_UP<anystring>_start,7,8,9
我正在尝试使用负前向提取行 UPanystring(在本例中为第 3 行和第 6 行)以排除第 1,2 和 4,5 行
import re
import csv
search = re.compile(r'.*_UP(?!early|late)')
output = []
with open('test.csv', mode='r', encoding='utf-8') as f:
csvfile = csv.reader(f)
for row in csvfile:
if row[0] == search:
output.append(row)
print(output)
>>>[]
当我在之后
print (output)
[<anystring>tony_UP<anystring>_start,7,8,9, <anystring>jane_UP<anystring>_start,7,8,9]
当我在 regex 平台上测试但在 python 中测试时,regex 搜索有效?
感谢 cmets:搜索代码现在看起来像
search = re.compile(r'^.*?_UP(?!early|late).*$')
output = []
with open('test.csv', mode='r', encoding='utf-8') as f:
csvfile = csv.reader(f)
for row in csvfile:
search.search(row[0]) # it think this needs and if=true but it won't accept a boolean here?
output.append(row)
现在返回所有行(即不过滤任何内容,而之前过滤所有内容)
【问题讨论】:
-
您没有正确使用您的正则表达式 - 搜索使用
search.search(row[0])。在Pattern.search()上阅读更多信息。 -
谢谢 - 这两种情况都改变了输出我现在在输出列表中有所有行?
-
您的整个
if ...声明现在看起来如何? -
谢谢,我想我在 .search 语法上苦苦挣扎。已添加到原始问题中。
-
使用
if not search.search(row[0]): ...仅传递与您的模式不匹配的行。
标签: regex python-3.x csv