2

I want to find all indexes for each occurrence of single alphabetical characters in a string. I don't want to catch single char html codes.

Here is my code:

import re
s = "fish oil B stack peanut c <b>"
words = re.finditer('\S+', s)
has_alpha = re.compile(??????).search
for word in words:
    if has_alpha(word.group()):
        print (word.start())

Desired output:

9
24
4

3 回答 3

6

这样做:

r'(?i)\b[a-z]\b'

分解它:

  • 不区分大小写的匹配
  • 一个词的边界
  • 一封信
  • 一个词的边界

您的代码可以简化为:

for match in re.finditer(r'(?i)\b[a-z]\b', s):
   print match.start()
于 2013-04-23T12:54:38.077 回答
2

使用您的格式(如您所愿),但仅添加一个简单的检查。

import re
s = "fish oil B stack peanut c <b>"
words = re.finditer('\S+', s)
has_alpha = re.compile(r'[a-zA-Z]').search
for word in words:
    if len(word.group()) == 1 and has_alpha(word.group()):
        print (word.start())
>>> 
9
24
于 2013-04-23T13:25:11.277 回答
1

在最一般的情况下,我会说:

re.compile(r'(?i)(?<![a-z])[a-z](?![a-z])').search

使用环视来表示“一个字母前面没有另一个字母,也没有后面跟着另一个字母”。

于 2013-04-23T13:34:51.500 回答