我的数据如下,
data['word']
1 Word1
2 WoRdqwertf point
3 lengthy word
4 AbCdEasc
5 Not to be filtered
6 GiBeRrIsH
7 zSxDcFvGnnn
我想在字符串中找出交替的大写字母和小写字母,并删除包含这些字样的行。例如,如果我们在此处看到,WoRdqwertf , AbCdEasc, GiBeRrIsH,zSxDcFvGnnn
具有交替的字符,我需要将其删除。
这里的要点是,不应删除包含Word1
的第一行,因为它只有一个大写字母后跟一个小字符。我想删除行,只有当它有一个帽子,小,帽子排列或小,帽子,小排列。我的输出应该是,
data['word']
1 Word1
3 lengthy word
5 Not to be filtered
任何人都可以帮助我或者知道如何处理这个问题吗?
答案 0 :(得分:2)
您可以使用字符串方法。 详细 - >
l = ['Word1','WoRdqwertf point','lengthy word','AbCdEasc', 'Not to be filtered','GiBeRrIsH', 'zSxDcFvGnnn']
n = []
for section in l:
new_section = []
for w in section.split():
if w == w.title() or w == w.lower():
new_section.append(w)
s = ' '.join(new_section)
if s:
n.append(s)
del new_section
print n
One-Liner - >
print filter(len,[' '.join(w for w in s.split()if w[1:].islower())for s in l])
<强>输出:强>
['Word1', 'point', 'lengthy word', 'Not to be filtered']
答案 1 :(得分:0)
您也可以使用filter
data=['Word1','WoRdqwertf point','lengthy word','AbCdEasc','Not to be filtered','GiBeRrIsH','zSxDcFvGnnn']
str_list = filter(lambda item: (item[0].isupper() and item[1:].lower()==item[1:]) or item.islower(), data)
print(list(str_list))
#['Word1', 'lengthy word', 'Not to be filtered']
过滤器只会添加小写item.islower()
的项目和仅以大写(item[0].isupper() and item[1:].lower()==item[1:])
开头的项目
答案 2 :(得分:0)
您可以使用正则表达式^(?:\w[a-z0-9]*(?: |$))*$
:
data = ['Word1','WoRdqwertf point','lengthy word','AbCdEasc', 'Not to be filtered','GiBeRrIsH', 'zSxDcFvGnnn']
import re
for line in data:
if re.search(r'^(?:\w[a-z0-9]*(?: |$))*$', line):
print (line)
请参阅live
答案 3 :(得分:0)
正则表达式解决方案:
import re
rx = re.compile(r'(?=.*(?:\b[A-Z][a-z\d]+\b)|^[a-z ]+$).+')
lst = ['Word1', 'WoRdqwertf point', 'lengthy word', 'AbCdEasc', 'Not to be filtered', 'GiBeRrIsH', 'zSxDcFvGnnn']
new_list = [item \
for item in lst \
if rx.match(item)]
print(new_list)
# ['Word1', 'lengthy word', 'Not to be filtered']