删除中间含有大写字母的单词
我有一些词,比如:'objQuery'、'Barack Obama'、'expandableMap'、'mh17'、'MH17'。我正在清理一些文本,这些文本中夹杂了一些编程语言的内容。
我想找到像'objQuery'这样的词,这些词是连续的,也就是说中间没有空格,也没有大写字母(更像是一些编程语言中的标识符),我想用正则表达式来实现。
那么,应该用什么样的正则表达式呢?
我试过:
re.search(r'\w+[A-Z]+', term)
但是这样会把一些专有名词也给去掉。
我想要的结果是:
正确:'objQuery'、'expandableMap'
任何包含中间有大写字母的词。这个词可以以字母或数字开头。我可以通过循环字符来写一个布尔函数来实现这个,但我想找一个更简短的方法。
错误:'Barack Obama'、'mh17'、'MH17'
3 个回答
1
def check(word):
cap = word[0].isupper()
for i,char in enumerate(word):
if char == ' ':
print('whitespace detected. Quitting')
return False
if char.isupper() and not cap:
print('detected upper case in the middle of the word at position', i)
输出结果:
In [43]: check('objQuery')
detected upper case in the middle of the word at position 3
In [44]: check('Barack Obama')
whitespace detected. Quitting
Out[44]: False
In [45]: check('expandableMap')
detected upper case in the middle of the word at position 10
3
这不就是类似于:[a-z]+[A-Z][a-zA-Z]+
,再加上需要的单词分隔符吗?
或者像Juan Lopes在评论中提到的那样,如果你还想匹配像objM
这样的字符串,可以用[a-z]+[A-Z][a-zA-Z]*
。