问题
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
回答1:
Using your format (as you wanted) but adding only a simple check.
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
回答2:
This does it:
r'(?i)\b[a-z]\b'
Breaking it down:
- Case insensitive match
- A word boundary
- A letter
- A word boundary
Your code can be simplified to this:
for match in re.finditer(r'(?i)\b[a-z]\b', s):
print match.start()
回答3:
In the most general case I'd say:
re.compile(r'(?i)(?<![a-z])[a-z](?![a-z])').search
Using lookarounds to say "a letter not preceded by another letter nor followed by another letter".
来源:https://stackoverflow.com/questions/16169815/python-regex-find-all-single-alphabetical-characters