在python中识别交替的大写和小写字符

时间:2016-08-25 18:14:19

标签: python regex string python-2.7 python-3.x

我的数据如下,

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

任何人都可以帮助我或者知道如何处理这个问题吗?

4 个答案:

答案 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']