用正则表达式获取大写字母的索引

时间:2017-11-28 08:10:28

标签: python regex python-2.7

我试图将大写字母(包括特殊字母)的索引排成一行。我找到了here以下解决方案:

[i for i, c in enumerate(s) if c.isupper()]

但是,这不适用于以下字母:Ö, ÄÜenter image description here

我试过了:

[re.search(r'^([^A-ZÄÖÜ]*[A-ZÄÖÜ]){i}',s).span()[1] for i in range (1,y)] 

其中y是s中的大写字母数。

如果我定义i,第二个解决方案有效,但在循环下,它返回:

  

attributeerror'nonetype'对象没有属性'span'。

如何以有效的方式解决它?

2 个答案:

答案 0 :(得分:0)

问题是s以字节表示。它只需要解码为unicode:

s=u'ÖÄÜ'       # str to unicode
[i for i, c in enumerate(s) if c.isupper()]

答案 1 :(得分:-1)

Python3:您可以轻松地使用isupper()执行此操作,无需使用正则表达式。不幸的是,如果你使用Python2.7,这将涉及一些讨厌的编码/解码,我不太熟悉。

x = "HEY thats Some Lower Case ZÄÖÜ"
print([i for i in range(0, len(x)) if x[i].isupper() ])
>[0, 1, 2, 10, 15, 21, 26, 27, 28, 29]