我尝试过太多的regex组合,以至于我不确定问题是我的regex还是python编码(这两者都是相当新的)。在
我有一个list
,叫做inputs
:
inputs = [':boy', '_144-', '_1445', '_1445', 'alpha', 'monkey', '#sdakm', '.file', '.magic']
我想以一个list
结尾,它只包含那些确实中有非字母字符(未知)的项。在
所以我想找到:
^{pr2}$没有所有的项目[a-z]。我还想过滤掉任何重复的匹配(任何类型)。在
我的python代码如下:
import os, sys, re, string, codecs, cchardet, chardet
inputs = [':boy', '_144-', '_1445', '_1445', 'alpha', 'monkey', '#sdakm', '.file', '.magic']
regex = re.compile('.*[^abcdefghijklmnopqrstuvwxyz]*.*')
myset = set()
inputs_filtered=[]
for inp in inputs:
if re.search(i,inp):
if inp not in myset:
inputs_filtered.append(inp)
print('adding' + inp)
myset.add(inp)
ofile.write(inp + '\n')
else:
print('removing duplicate ' + inp)
else:
print("IS ALL LETTERS " + i)
print(myset)
ofile.close()
我尝试过过滤或保留regex(我尝试过很多不同的方法,包括使用以下内容的不同代码:
[filter(lambda i: regex.search(i), inputs)]
'\".*[\W|\.|_|\_|-|\-]*.*\"
'.*[^abcdefghijklmnopqrstuvwxyz]*.*'
'\"[\w]*\",?'
'[\w]*'
另一件不应该发生的事情是myset.add()
似乎正在生成一个空集,但是出于某种奇怪的原因,inputs_filtered
正在被填充……我想。在
您可以将
re.findall
与\W
一起使用:输出:
^{pr2}$由于在示例中使用的是set,结果的顺序似乎并不重要。 你可以用两种方法轻松做到这一点。一个有正则表达式,另一个没有正则表达式(如果不需要,为什么还要用正则表达式呢)。在
对于regex,您只需要一个简单的regex
[^a-z]
。使用filter
可以执行以下操作:如果适合您的情况,
^{pr2}$str
类上有一个名为isalpha
的函数,如果字符串只有字母字符,则返回true。可以使用以下代码构建集合:如果包含来自
itertools
的filterfalse
函数(filter
的对应点),则可以执行以下操作:您可以考虑编写自己的函数来与
filter
一起使用。这里有一个函数也不包括冒号或空格:如果您希望排除其他一些字符,可以使用regex或使用
any
函数作为过滤器函数的一部分:在
[^abcdefghijklmnopqrstuvwxyz]
之后有一个*
,这意味着匹配0个或更多个重复。将其更改为+
,这样就意味着匹配它1个或多个重复。在您可以将
[^abcdefghijklmnopqrstuvwxyz]
缩写为[^a-z]
。在相关问题 更多 >
编程相关推荐