私はpythonを使用してファイルを調べ、コメントを削除しています。コメントは、ハッシュが二重引用符で囲まれていない限り、ハッシュとその右側にあるものとして定義されます。私は現在解決策を持っていますが、最適ではないようです:
filelines = []
r = re.compile('(".*?")')
for line in f:
m = r.split(line)
nline = ''
for token in m:
if token.find('#') != -1 and token[0] != '"':
nline += token[:token.find('#')]
break
else:
nline += token
filelines.append(nline)
forループなしで引用符内にない最初のハッシュを見つける方法はありますか(つまり、正規表現を使用しますか?)
例:
' "Phone #":"555-1234" ' -> ' "Phone #":"555-1234" '
' "Phone "#:"555-1234" ' -> ' "Phone "'
'#"Phone #":"555-1234" ' -> ''
' "Phone #":"555-1234" #Comment' -> ' "Phone #":"555-1234" '
編集: これは、user2357112 によって作成された純粋な正規表現ソリューションです。私はそれをテストしました、そしてそれはうまくいきます:
filelines = []
r = re.compile('(?:"[^"]*"|[^"#])*(#)')
for line in f:
m = r.match(line)
if m != None:
filelines.append(line[:m.start(1)])
else:
filelines.append(line)
この正規表現の仕組みの詳細については、彼の返信を参照してください。
Edit2: これは、エスケープ文字 (\") を考慮して修正した user2357112 のコードのバージョンです。このコードは、文字列の末尾 ($) のチェックを含めることで「if」も排除します。
filelines = []
r = re.compile(r'(?:"(?:[^"\\]|\\.)*"|[^"#])*(#|$)')
for line in f:
m = r.match(line)
filelines.append(line[:m.start(1)])