删除 unicode [u']
Remove unicode [u']
我有这个字符串,从网页输入的。
s = "[u'967208', u'411600', u'460273']"
我想删除括号 [ ]
和 u
和 '
。
我也想用 new line breaks
代替逗号 ,
.
我花了很多时间寻找解决方案,包括编码和正则表达式,但我似乎无法让它工作。
已更新:这是我用来检索字符串的方法:
import selenium
import re
input = webdriver.find_element_by_class_name("class_name")
s = re.findall("((?<=\()[0-9]*)", input.text)
>>> import ast
>>> s = "[u'967208', u'411600', u'460273']"
>>> a = ast.literal_eval(s)
>>> print(*a, sep='\n')
967208
411600
460273
如果你只想要带有 re
的数字,只需使用 \d+
:
import re
s = "[u'967208', u'411600', u'460273']"
print "\n".join(re.findall(r"\d+", s))
967208
411600
460273
安全高效:
In [7]: timeit "\n".join(literal_eval(s))
100000 loops, best of 3: 11.7 µs per loop
In [8]: r = re.compile(r"\d+")
In [9]: timeit "\n".join(r.findall(s))
1000000 loops, best of 3: 1.35 µs per loop
如果您的目标是将每个字符串写入文件,您可以使用 csv 模块写入从 re.findall 返回的字符串列表,使用换行符作为分隔符:
s = u"[u'967208', u'411600', u'460273']"
import csv
import re
with open("out.csv","w") as out:
wr = csv.writer(out,delimiter="\n")
r = re.compile("\d+")
wr.writerow(r.findall(s))
输出:
967208
411600
460273
如果您有很多字符串,只需迭代调用调用 r.findall 并将结果传递给 writerow。
我想在评论之后谜团就解开了,你一直有一个数字列表,它是使用 findall 从你的正则表达式返回的,所以你可以执行以下操作:
u"abc(967208) \n abc2(411600) \n abc3(460273)" # input.text
import csv
import re
with open("out.csv","w") as out:
wr = csv.writer(out,delimiter="\n")
r = re.compile("\((\d+)\)")
wr.writerow(r.findall(input.text))
\((\d+)\)
会在括号内找到 1+ 个数字。
我有这个字符串,从网页输入的。
s = "[u'967208', u'411600', u'460273']"
我想删除括号 [ ]
和 u
和 '
。
我也想用 new line breaks
代替逗号 ,
.
我花了很多时间寻找解决方案,包括编码和正则表达式,但我似乎无法让它工作。
已更新:这是我用来检索字符串的方法:
import selenium
import re
input = webdriver.find_element_by_class_name("class_name")
s = re.findall("((?<=\()[0-9]*)", input.text)
>>> import ast
>>> s = "[u'967208', u'411600', u'460273']"
>>> a = ast.literal_eval(s)
>>> print(*a, sep='\n')
967208
411600
460273
如果你只想要带有 re
的数字,只需使用 \d+
:
import re
s = "[u'967208', u'411600', u'460273']"
print "\n".join(re.findall(r"\d+", s))
967208
411600
460273
安全高效:
In [7]: timeit "\n".join(literal_eval(s))
100000 loops, best of 3: 11.7 µs per loop
In [8]: r = re.compile(r"\d+")
In [9]: timeit "\n".join(r.findall(s))
1000000 loops, best of 3: 1.35 µs per loop
如果您的目标是将每个字符串写入文件,您可以使用 csv 模块写入从 re.findall 返回的字符串列表,使用换行符作为分隔符:
s = u"[u'967208', u'411600', u'460273']"
import csv
import re
with open("out.csv","w") as out:
wr = csv.writer(out,delimiter="\n")
r = re.compile("\d+")
wr.writerow(r.findall(s))
输出:
967208
411600
460273
如果您有很多字符串,只需迭代调用调用 r.findall 并将结果传递给 writerow。
我想在评论之后谜团就解开了,你一直有一个数字列表,它是使用 findall 从你的正则表达式返回的,所以你可以执行以下操作:
u"abc(967208) \n abc2(411600) \n abc3(460273)" # input.text
import csv
import re
with open("out.csv","w") as out:
wr = csv.writer(out,delimiter="\n")
r = re.compile("\((\d+)\)")
wr.writerow(r.findall(input.text))
\((\d+)\)
会在括号内找到 1+ 个数字。