#python #regex
Вопрос:
Цель состоит в извлечении number
из строки.
Этого можно легко достичь с помощью split
s='/mnt/d/datat/ssome_part - Copy/s14_060319m.set.zip'
n=s.split('Copy/')[1].split('set')[0].split('_')
sbj=n[0]
sub=n[1]
которые производят
sbj = {str} 's14'
sub = {str} '060319m.'
Пожалуйста, обратите внимание на префикс m
sub
. Это уникально для разных случаев.
Текущее предложение позволяет мне использовать заглавную s
букву , такую как BBarmar
sbj=’S’ sbj
Но я изо всех сил пытаюсь применить это regex
. И выполнение описанных ниже действий не привело к желаемому результату
m = re.findall(r'%s(d )', s)
Комментарии:
1.
%s
В вашей строке нет, что это должно означать в регулярном выражении?2. Просто используйте
r'd '
3. За
s
то, что было незадолго до14
этого .4. А как насчет
%
этого ?5.
s
Перед вторым номером нет, так что он будет соответствовать только первому номеру.
Ответ №1:
Просто используйте регулярное d
выражение для сопоставления чисел.
Чтобы соответствовать s
префиксу или m
суффиксу, используйте альтернативы с. |
sbj, sub = re.findall(r'sd |d m', s)
Комментарии:
1. Спасибо за предложение @Barмар. Могу я узнать, как включить
m
это вsub
вывод? В настоящее время он удален. Вместо060319
того , чтобы я хотел бы, чтобы это было060319m
так .2. И вы также хотите
s
, чтобы вsbj
выводе было?3. Вы могли бы использовать
r'sd |d m'
4. Где в вопросе говорится, что вам нужны письма?
5. Я обновлю вопрос, чтобы отразить это. Я раньше не задумывался об этом вопросе
Ответ №2:
Воспользуйся
import re
s='/mnt/d/datat/ssome_part - Copy/s14_060319m.set.zip'
match = re.search(r'(w )_(w )[^/]*
Видеть Доказательство Python | доказательство регулярных выражений.
объяснение
--------------------------------------------------------------------------------
( group and capture to 1:
--------------------------------------------------------------------------------
w word characters (a-z, A-Z, 0-9, _) (1 or
more times (matching the most amount
possible))
--------------------------------------------------------------------------------
) end of 1
--------------------------------------------------------------------------------
_ '_'
--------------------------------------------------------------------------------
( group and capture to 2:
--------------------------------------------------------------------------------
w word characters (a-z, A-Z, 0-9, _) (1 or
more times (matching the most amount
possible))
--------------------------------------------------------------------------------
) end of 2
--------------------------------------------------------------------------------
[^/]* any character except: '/' (0 or more times
(matching the most amount possible))
--------------------------------------------------------------------------------
$ before an optional n, and the end of the
string
Ответ №3:
Если вы хотите, только num_num
попробуйте это:
s='/mnt/d/datat/ssome_part - Copy/s14_060319m.set.zip'
re.findall(r'd _d ', s)[0].split('_')
# ['14', '060319']
Или если у вас, возможно, есть несколько чисел, лучше получить список тупиц, как показано ниже:
s='/mnt/d/datat/ssome20_part10 - Copy/s14_060319m.set.zip'
lst_num = re.findall(r'd ', s)
lst_num
# ['20', '10', '14', '060319']
Ответ №4:
Или просто так:
>>> sbj, sub = re.findall('[0-9] ', s)
>>> sbj
'14'
>>> sub
'060319'
>>>
, s)
if match is not None:
print(match.group(1).upper())
print(match.group(2))
Видеть Доказательство Python | доказательство регулярных выражений.
объяснение
Ответ №3:
Если вы хотите, только num_num
попробуйте это:
Или если у вас, возможно, есть несколько чисел, лучше получить список тупиц, как показано ниже:
Ответ №4:
Или просто так: