#python
Вопрос:
Я нашел эту часть кода в другом посте, и хотя мне удалось наткнуться на правильный вывод, я почти уверен, что есть более чистый способ сделать это.
Хотя есть много сообщений с похожими вопросами, я не нашел ни одного, где символы, по которым можно найти индекс, также включены в извлечение…
Я, по сути, ищу, чтобы извлечь B08BY4V3NW
.
Может ли кто-нибудь поделиться более кратким способом достижения этой цели?
s1 = "sp - disc - auto - B08BY4V3NW - 18cb mold" s2 = "B0" print (s1[s1.index(s2) - len(""):-12])
Комментарии:
1. Вы согласны с использованием
regex
?2.
len("")
было бы просто 0, не так ли?3.
s1
Будет ли он всегда таким?4. вы могли бы использовать что-то вроде этого:
re.findall(s2 r"[a-zA-Z0-9] ", s1)
5. len(«») равен 0, да, но в сообщении, в котором я это нашел, у len было значение, и я не знаю, как удалить len и все равно заставить это работать…
Ответ №1:
Вы можете попробовать это :
from nltk.tokenize import word_tokenize tokens = word_tokenize(s1) str_match = [w for w in tokens if s2 in w]
Редактировать :
s1 = "sp - disc - auto - B08BY4V3NW - 18cb mold" s2 = "B0" tokens = str.split(s1)
Тот str.split(s1)
вернется :
['sp', '-', 'disc', '-', 'auto', '-', 'B08BY4V3NW', '-', '18cb', 'mold']
Затем вы можете найти свою строку, следуя из списка:
1. Использование понимания списка
str_match = [w for w in tokens if s2 in w] print(str_match) ['B08BY4V3NW']
2. Использование фильтра
str_match = list(filter(lambda x: s2 in x, tokens)) print(str_match) ['B08BY4V3NW']
3. Использование re
import re str_match = [x for x in tokens if re.search(s2, x)] print(str_match) ['B08BY4V3NW']
Если вы хотите B08BY4V3NW
в строковом формате, вы можете использовать :
str_ = ''.join(str_match) type(str_) str
Комментарии:
1.
nltk
возможно, это излишне, когда кажетсяs1.split()
, что это сработает, но OP не дал никакого контекста, поэтому IDK.2. Не могли бы вы привести пример того, как это будет выглядеть с помощью split()? Я уже пытался использовать это с индексацией местоположения s2, но также не смог заставить это работать…
3. @acaciagrove Я редактирую свой ответ