Видалення слів із символів CAPITAL між ними - python, regex

У мене є такі слова: "objQuery", "Барак Обама", "expandableMap", "mh17", "MH17". Я очищую текст, який легко переписаний мовами кодування

Я хочу виявити такі слова, як "objQurry", які безперервно, тобто без будь-яких пробілів та великих букв між ними (більше схожими на деякі токени кодування мови) за допомогою регулярних виразів.

Що може бути регулярним вираженням для цього?

Я намагався:

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

який також відбирає власні назви.

Я також хочу результат:

Вірно: "objQuery", "expandableMap"

Будь-яке слово, що містить букви капіталу між ними. Слово може починатися з буквено-цифрових символів. Я можу співати через символи і сформувати логічну функцію, але я шукаю щось коротке.

Неправдиві: "Барак Обама", "mh17", "MH17"

Відповіді:

3 для відповіді № 1

Я думаю, ви шукаєте це.

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"]

АБО

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

DEMO


3 для відповіді № 2

Isn "t це просто щось на кшталт: [a-z]+[A-Z][a-zA-Z]+, з чим потрібні слова-сепаратори?

Або, як зазначає Хуан Лопес у коментарі, [a-z]+[A-Z][a-zA-Z]* якщо ви також хочете зіставити рядки, як objM.


1 для відповіді № 3
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

Схожі запитання
Найбільш популярний