删除中间带有大写字母的单词

时间:2014-07-27 16:52:08

标签: python regex

我的话有:' objQuery',' Barack Obama',' expandableMap',' mh17',' MH17& #39 ;.我正在清理用编码语言轻轻填写的文本

我想检测像' objQuery'在正则表达式的帮助下,它们是连续的,即没有任何空格和大写字母(更像是一些编码语言标记)。

这样做的正则表达式是什么?

我试过了:

re.search(r'\w+[A-Z]+', term)

也取消了专有名称。

我也希望得到结果:

正确:' objQuery',' expandableMap'

  
    

任何包含大写字母的单词。 Word可以以字母数字字符开头。我可以遍历字符并形成一个布尔函数来执行此操作,但我正在寻找简短的内容。

  

错误:' Barack Obama',' mh17',' MH17'

3 个答案:

答案 0 :(得分:3)

是不是只有:[a-z]+[A-Z][a-zA-Z]+,用什么词分隔符是必要的?

或者,正如Juan Lopes在评论中建议[a-z]+[A-Z][a-zA-Z]*,如果您还想匹配objM等字符串。

答案 1 :(得分:3)

我认为你正在寻找这个。

\b[a-z]+(?:[A-Z][a-z]+)+\b

DEMO

>>> s = "objQuery Barack Obama expandableMapFoo"
>>> m = re.findall(r'\b[a-z]+(?:[A-Z][a-z]+)+\b', s)
>>> m
['objQuery', 'expandableMapFoo']

OR

\b[a-z0-9A-Z]+(?:[A-Z][a-z]+)+\b

DEMO

答案 2 :(得分: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