1. ホーム
  2. python

[解決済み] string.replaceで正規表現を入力するには?

2022-03-24 08:20:11

質問

正規表現について教えてください。私の入力は次のようなものです。

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まで設定できます。

解決方法は?

このテストされたスニペットはそれを行う必要があります。

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)

Regexesは 楽しい しかし、1〜2時間かけて基本を勉強することを強くお勧めします。まず、どの文字が特別なのかを学ぶ必要があります。 メタキャラクタ" をエスケープする必要があります(つまり、バックスラッシュを前に置く必要があります。また、文字クラスの内側と外側でルールが異なります。)。優れたオンラインチュートリアルがあります。 www.regular-expressions.info . このような時間を過ごすことで、何倍もの利益を得ることができます。それでは、Happy regexing!