Учитывая входную строку букв и цифр, я пытаюсь захватить числа, которые соответствуют заданному формату c.
Входной образец выглядит следующим образом:
Здравствуйте моя net ценность составляет 1 000 000,00, и мне она нравится
Ожидаемый результат: 1 000 000,00
def detect_numbers(input_numbers_string):
number_format_pattern_map = {
'us_start_with_decimal_regex': '(\.{1}\d+)$',
'us_decimal_and_comma_regex': '\d{1,3}(,{1}\d{3})*(\.{1}\d+){0,1}$'
}
fuzzy_matched_substrings = []
fuzzy_match_locations = []
fuzzy_changes = []
matched_formats = []
for numbers in number_format_pattern_map:
number_pattern_string = number_format_pattern_map[numbers]
r = regex.compile('(?e)(%s){e<=2}' % number_pattern_string)
fuzzy_matches = r.finditer(query_string)
for matches in fuzzy_matches:
print(matches)
if __name__ == '__main__':
query_string = 'hello my net worth is 1,000,000.00 and i like it'
updated_query_string = detect_numbers(query_string)
print(updated_query_string)
Я получаю ожидаемый результат, когда передаю «1,000,000,00» в качестве входной строки. Однако, когда я передаю «привет, моя net стоимость составляет 1 000 000,00, и мне она нравится», я получаю следующий результат:
regex.Regex ('(? E) ((\. {1} \ d +) $) {e <= 2} ', flags = regex.V0) regex.Regex ('(? e) (\ d {1,3} (, {1} \ d {3}) <em>(\. {1} \ d +) {0,1} $) {e < = 2} ', flags = regex.V0) regex.Regex ('(? e) ((, {1} \ d +) $) {e <= 2}', flags = regex.V0) regex.Regex ('(? e) (\ d {1,3} (\. {1} \ d {3}) </em> (, {1} \ d +) {0,1} $) {e < = 2} ', flags = regex.V0)
Это захватывает только его и t, тогда как он должен захватывать 1,000,000.00 и подобные подстроки. Любая помощь или советы приветствуются.