Python - получить строку после и до символа

У меня есть эти строки:

"I have been working - 8h by day"
"Like - 9H by Month"

Я пытаюсь узнать количество часов. В основном я пытаюсь получить такой вывод:

8
9

Я пробую это, но безуспешно:

print(myString.split("H",1)[1] )

Но я получаю следующее:

builtins.IndexError: list index out of range

Как я могу получить строку после «-» и перед «H» в Python?

Спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
9 301
4

Ответы 4

Использовать регулярное выражение

Бывший:

import re

s = ["I have been working - 8h by day", "Like - 9H by Month"]
for i in s:
    print(re.findall("\d+H" ,i, flags=re.I))

Выход:

['8']
['9']

Вы можете использовать re.findall для сопоставления всех цифр, только если за ними следует h или H:

import re
s = ["I have been working - 8h by day", "Like - 9H by Month"]
new_s = [re.findall('\d+(?=H)', i, flags=re.I)[0] for i in s]

Выход:

['8', '9']

проблема в том, что в "I have been working - 8h by day" нет "H", поэтому при разделении на «H» в списке будет только один элемент.

вы можете найти его с помощью регулярного выражения

import re
pattern = r'\d(?=[h|H])'
data = ["I have been working - 8h by day",
        "Like - 9H by Month"]

for item in data:
    print re.findall(pattern, item)

В этом есть опасность, что он будет разделен на другие H и сохранит всю строку (чтобы решить эту проблему, напишите лучшее выражение с регулярным выражением).

чтобы разрешить ваш код как есть:

print(myString.split("H",1)[0][::-1][0])

Другие вопросы по теме