Regex RESULT - это никто - PullRequest
       4

Regex RESULT - это никто

3 голосов
/ 06 мая 2019

Я хочу извлечь «Физику» из приведенного ниже текста, но я получаю значение «Нет».

Не могли бы вы объяснить, в чем заключается ошибка в моем коде?

Моя логика для регулярных выражений была следующей

-> ^ [AZ] - для сопоставления первого символа любого слова, начинающегося с ЗАГЛАВНОЙ БУКВЫ.

-> [az]+ - для сопоставления любых последующих 1 или более символов

import re
text = "111   PCM   Physics"
print(re.search(r'^[A-Z][a-z]+', text))

Ответы [ 3 ]

1 голос
/ 06 мая 2019

Ниже код работал для меня, чтобы извлечь "Физика" из данного текста.

text = "111 PCM Physics"
if "Physics" in text:
    print("Yes, Physics present in given text ")
    s = text.find("Physics")
    print(text[s:s+7]) # 7 is for lenght of "Physics"
else:
    print( "No, Physics does not present in given text " )
1 голос
/ 06 мая 2019

Это потому, что ^ в шаблоне проверяет, находится ли [A-Z] в начале строки. Следовательно, в заданном входном тексте text = "111 PCM Physics" начальная строка 111 и, следовательно, шаблон не может соответствовать слову Physics.

Согласно документации,

^ Совпадения в начале строк.

Это означает, что когда шаблон начинается с ^, то компилятор ищет строки, которые начинаются с шаблона, следующего за ним. Например, в r'^[A-Z][a-z]+' [A-Z] будет соответствовать начальным заглавным буквам, таким как физика, Ankit, поскольку перед ним стоит ^.

Вы могли бы рассмотреть ниже без символа каретки. Это будет соответствовать прописным словам в любом месте входного текста.

pattern = r'[A-Z][a-z]+'
1 голос
/ 06 мая 2019

Если вы хотите, чтобы шаблон регулярных выражений находил в тексте последнее заглавное слово, используйте это:

[A-Z][a-z]+$

Как говорится, здесь есть оговорка с re.match. Поскольку мы вызываем последний якорь $, поэтому re.match будет пытаться сопоставить всю входную строку, поэтому мы должны использовать этот код:

text = "111   PCM   Physics"
m = re.match(r'^.*([A-Z][a-z]+)$', text)
print(m.group(1))

Но обратите внимание, что мы с такой же легкостью могли бы использовать re.split здесь и разбить входной текст на пробелы:

parts = re.split(r'\s+', text)
print(parts[2])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...