Как получить строку после некоторых конкретных букв? - PullRequest
2 голосов
/ 30 марта 2019

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

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

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

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

Ответы [ 5 ]

3 голосов
/ 30 марта 2019

Если вы хотите получить остаток от шаблона "[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 голосов
/ 30 марта 2019
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
2 голосов
/ 30 марта 2019

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

import re
text = "X90 test"
t = re.sub("[A-Z]+[0-9]+ ","",text)
print(t) #test
2 голосов
/ 30 марта 2019

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

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

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

1 голос
/ 30 марта 2019

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...