Как написать регулярное выражение (равно «[Tt][Ee][Xx][Tt]» и не равно "text")?

Нужно найти вхождения слова у которого присутствуют буквы верхнего регистра, но при этом не находились слова написанные полностью в нижнем регистре.

Например нужно найти слово "TeXt" с разными регистрами букв ([Tt][Ee][Xx][Tt]), но чтобы не находилось слово "text" т.к. оно в нижнем регистре

Text - true
TeXt - true
teXt - true
TEXT - true
text - false

add
Есть некий текст, но искать нужно не все слова(с большими и маленькими буквами), а определенное искомое слово которое встречается, но не в нижнем регистре.
  • Вопрос задан
  • 2888 просмотров
Решения вопроса 1
adugin
@adugin
Через negative lookbehind/lookahead assertion:

#!/usr/bin/python2.7
# -*- coding: utf-8 -*-

import re

test = """Text - true
TeXt - true
teXt - true
TEXT - true
text - false"""

reg1 = re.compile(ur"([Tt][Ee][Xx][Tt])(?<!text)")
reg2 = re.compile(ur"(?!text)([Tt][Ee][Xx][Tt])")

print reg1.findall(test)
print reg2.findall(test)


Результат:

Z:\>test.py
['Text', 'TeXt', 'teXt', 'TEXT']
['Text', 'TeXt', 'teXt', 'TEXT']
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
egor_nullptr
@egor_nullptr
/\s([a-zA-Z]*[A-Z]+[a-zA-Z]*)\s/
Ответ написан
Комментировать
@Boshmax Автор вопроса
Не совсем то что надо.

Есть некий текст, но искать нужно не все слова(с большими и маленькими буквами), а определенное искомое слово которое встречается, но не в нижнем регистре.
Ответ написан
Комментировать
egor_nullptr
@egor_nullptr
match /\s(test)\s/i && not match /\stest\s/

php:
if (preg_match_all('/\s(test)\s/i', $text, $matches) && !preg_match('/\stest\s/', $text)) {
    print_r($matches);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы