我正在尝试从特定列中的csv文件中提取动态值(静态字符),并将值输出到另一个csv。
我想要提取的数据元素是' 12385730561818101591'来自价值' callback=B~12385730561818101591
'位于特定列。
我编写了下面的python脚本,但输出结果总是空白的。正则表达式=(~[0-9]+)
'经过验证,成功撤出了“12385730561818101591”。值。这是在www.regex101.com
上测试的。
当我在Python中使用它时,输出文件中不会显示任何结果。我有一种感觉'〜'导致错误。当我尝试搜索' ~
'在原始的CSV文件中,没有找到任何结果,但它就在那里!
社区可以帮助我解决以下问题:
(1)确定无输出的根本原因并验证是否'〜'是问题。问题也可能是我分裂行的方式吗?我不确定这些行是否应按';'而不是'。
import csv
import sys
import ast
import re
filename1 = open("example.csv", "w")
with open('example1.csv') as csvfile:
data = None
patterns = '=(~[0-9]+)'
data1= csv.reader(csvfile)
for row in data1:
var1 = row[57]
for item in var1.split(','):
if re.search(patterns, item):
for data in item:
if 'common' in data:
filename1.write(data + '\n')
filename1.close()
答案 0 :(得分:0)
你的例子你的正则表达式是错误的:
=(~[0-9]+)
永远不会与callback=B~12385730561818101591
匹配,因为B
后=
和~
之前。
您还要在捕获组中包含~
。
不能确定你的目标是什么,但这可行。如果您有更多限制,请提供更多详细信息。
=.+~([0-9]+)
修改强>
根据新提供的信息:
patterns = '=.+~([0-9]+)'
...
result = re.search(patterns, item):
number = result.group(0)
filename1.write(number + '\n')
...
关于\ t(制表符号)中的行拆分,您应该显示完整行的示例
答案 1 :(得分:0)
这里我试着编写示例代码。希望这能帮助您解决问题:
import re
str="callback=B~12385730561818101591"
rc=re.match(r'.*=B\~([0-9A-Ba-b]+)', str)
print rc.group(1)