Сейчас я изучаю регулярные выражения, и мне трудно отлаживать. Моя цель состоит в том, чтобы, учитывая строку, которая содержит несколько соотношений или форматов одинаковых форматов, извлеките все правильные соотношения в формате x +: x + (+ означает несколько цифр). Это мой код ниже:
string= "2890.1:2004 1.45.7 2890.6:2009 505.204:908.890 1:100 0.55:1 10:59:40"
#empty string declaration
other_str = str()
time_str = str()
ratio_str = str()
#pattern for ratio, time and other format
pattern_ratios = re.compile(r'1:[-+]?[0-9]+')
pattern_time = re.compile(r'[0-9]+:[0-9]+:[0-9]+')
pattern_other = re.compile(r'\d*\.?\d+:\d*\.?\d+')
#create irritable re.match object
matches_ratios = pattern_ratios.finditer(string)
matches_time = pattern_time.finditer(string)
matches_other = pattern_other.finditer(string)
#create a time string to store all time format found
for time_match in matches_time:
time_str += string[time_match.span()[0]:time_match.span()[1]] + ' '
print('time string =',time_str)
#create a other string to store all other format found
for other_match in matches_other:
other_str += string[other_match.span()[0]:other_match.span()[1]] + ' '
print('other string =', other_str)
#create a ratio string to store all ratio format found
for ratio_match in matches_ratios:
ratio = string[ratio_match.span()[0]:ratio_match.span()[1]]
print('\nratio =',ratio)
print('not in other string:',ratio not in other_str)
print('not in time string:',ratio not in time_str)
if (ratio not in other_str and ratio not in time_str):
ratio_str += ratio + ' '
print('ratio list =',ratio_str.split())
Вывод:
строка времени = 10: 59: 40
другая строка = 2890,1: 2004 2890,6: 2009
505,204: 908,890 1: 100 0,55: 1 10:59
Соотношение = 1: 2004
не в другой строке: False
не во временной строке: True
Соотношение = 1: 100
не в другой строке: False
не во временной строке: True
список коэффициентов = []
Что является неожиданным выводом, потому что, насколько я понимаю, если я сделаю это в двух разных строках, как показано ниже:
str1 = '2890.1:2004 2890.6:2009 505.204:908.890 1:100 0.55:1 10:59'
str2 = '1:2004'
str2 in str1
Вывод True!
Это как-то связано с самим оператором?