Мне нужна помощь по объявлению регулярного выражения. Мои входные данные выглядят следующим образом:
this is a paragraph with<[1> in between</[1> and then there are cases ... where the<[99> number ranges from 1-100</[99>. and there are many other lines in the txt files with<[3> such tags </[3>
Требуемый результат:
this is a paragraph with in between and then there are cases ... where the number ranges from 1-100. and there are many other lines in the txt files with such tags
Я пробовал это:
#!/usr/bin/python import os, sys, re, glob for infile in glob.glob(os.path.join(os.getcwd(), '*.txt')): for line in reader: line2 = line.replace('<[1> ', '') line = line2.replace('</[1> ', '') line2 = line.replace('<[1>', '') line = line2.replace('</[1>', '')
print line
Я тоже пробовал это (но, похоже, я использую неправильный синтаксис регулярных выражений):
line2 = line.replace('<[*> ', '') line = line2.replace('</[*> ', '') line2 = line.replace('<[*>', '') line = line2.replace('</[*>', '')
Я не хочу жестко кодировать replace от 1 до 99.
Переведено автоматически
Ответ 1
Этот протестированный фрагмент должен это сделать:
import re line = re.sub(r"</?\[\d+>", "", line)
Редактировать: Вот прокомментированная версия, объясняющая, как это работает:
line = re.sub(r""" (?x) # Use free-spacing mode. < # Match a literal '<' /? # Optionally match a '/' \[ # Match a literal '[' \d+ # Match one or more digits > # Match a literal '>' """, "", line)
Регулярные выражения - это весело! Но я бы настоятельно рекомендовал потратить час или два на изучение основ. Для начала вам нужно узнать, какие символы являются особыми: "метасимволы", которые нужно экранировать (т. Е. С обратной косой чертой, помещенной впереди - и правила различаются внутри и вне классов символов.) Есть отличный онлайн-учебник по адресу: www.regular-expressions.info. Время, которое вы потратите на это, окупится многократно. Удачного регулярного выражения!
Ответ 2
str.replace() выполняет фиксированные замены. Используйте re.sub() вместо этого.
Ответ 3
I would go like this (regex explained in comments):
import re
# If you need to use the regex more than once it is suggested to compile it. pattern = re.compile(r"</{0,}\[\d+>")
# <\/{0,}\[\d+> # # Match the character “<” literally «<» # Match the character “/” literally «\/{0,}» # Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «{0,}» # Match the character “[” literally «\[» # Match a single digit 0..9 «\d+» # Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+» # Match the character “>” literally «>»
subject = """this is a paragraph with<[1> in between</[1> and then there are cases ... where the<[99> number ranges from 1-100</[99>. and there are many other lines in the txt files with<[3> such tags </[3>"""
result = pattern.sub("", subject)
print(result)
If you want to learn more about regex I recomend to read Regular Expressions Cookbook by Jan Goyvaerts and Steven Levithan.
Ответ 4
The easiest way
import re
txt='this is a paragraph with<[1> in between</[1> and then there are cases ... where the<[99> number ranges from 1-100</[99>. and there are many other lines in the txt files with<[3> such tags </[3>'