Как получить строку, следующую за некоторыми определенными буквами?

#python #regex

#python #регулярное выражение

Вопрос:

Как я могу получить строку из некоторых определенных символов? (более конкретно, получите «test» из «A8 test») В этом случае «A8» следует шаблону, подобному "[A-Z] [0-9] " . Таким образом, это также может быть «Тест C6», «Тест X90» и т.д.

Я пробовал в Python использовать "(?<=[A-Z] [0-9]). " , который выдает исключение: "sre_constants.error: look-behind requires fixed-width pattern."

Это означает, что я должен использовать шаблон фиксированной ширины, такой как "(?<=[A-Z]{1}[0-9]{1})" .

Но на самом деле это не фиксированная ширина. Что я могу сделать?

Комментарии:

1. Просто используйте группы захвата, как в [A-Z] [0-9] (. ) . Здесь возьмем первую группу.

Ответ №1:

Если вы имеете в виду получить остальное за шаблоном "[A-Z] [0-9] " , вы можете попробовать это:

 import re 

s1 = 'A8 test'
s2 = 'C6 123'
s3 = 'X90 test32'

# parentheses is what you want
p = re.compile("[A-Z] [0-9]  (w )")

print(p.findall(s1))
print(p.findall(s2))
print(p.findall(s3))
  

вывод:

 ['test']
['123']
['test32']
  

Надеюсь, это поможет вам, и прокомментируйте, если у вас возникнут дополнительные вопросы. : )

Ответ №2:

Вы можете использовать группу захвата, чтобы получить то, что вам нужно.

 >>> regexp = r"[A-Z] [0-9]  (. )"
>>> re.search(regexp, "C6 test")[1]
"test"
>>> re.search(regexp, "X90 test")[1]
"test"
>>> re.search(regexp, "CBF58456 test")[1]
"test"
  

Обратите внимание, что текущий шаблон, который вы показываете, будет содержать любое количество заглавных букв, за которыми следует любое количество цифр, при условии, что есть хотя бы одна из каждой. Также обратите внимание, что в моем примере выше для захвата потребовался бы пробел между первой частью и тестовой строкой.

Ответ №3:

Вы также могли бы использовать re.sub для удаления части str , которая вам не нужна, просто используя empty str в качестве второго аргумента:

 import re
text = "X90 test"
t = re.sub("[A-Z] [0-9]  ","",text)
print(t) #test
  

Ответ №4:

 import re
ex = r"[A-Z] [0-9]  (. )"
print(re.search(ex , "X90 test")[1])
print(re.search(ex , "C6 test")[1])
print(re.search(ex , "CBF58456 test")[1])
  

Вывод

 test
test
test
  

Ответ №5:

Вы можете разделить строку, а затем получить свою строку.

 >>> re.split(r'([A-Z] [0-9]  )(test)', 'A8 test')
['', 'A8 ', 'test', '']
  

Или вы можете написать простую функцию для поиска нужной строки во всей строке, не используя regex.