Apakah Python memiliki fungsi yang dapat saya gunakan untuk mengosongkan karakter khusus dalam ekspresi reguler?
Misalnya, I'm "stuck" :\
harus menjadi I\'m \"stuck\" :\\
.
Apakah Python memiliki fungsi yang dapat saya gunakan untuk mengosongkan karakter khusus dalam ekspresi reguler?
Misalnya, I'm "stuck" :\
harus menjadi I\'m \"stuck\" :\\
.
Jawaban:
Menggunakan re.escape
>>> import re
>>> re.escape(r'\ a.*$')
'\\\\\\ a\\.\\*\\$'
>>> print(re.escape(r'\ a.*$'))
\\\ a\.\*\$
>>> re.escape('www.stackoverflow.com')
'www\\.stackoverflow\\.com'
>>> print(re.escape('www.stackoverflow.com'))
www\.stackoverflow\.com
Ulangi di sini:
re.escape (string)
Kembalikan string dengan semua non-alfanumerik dengan garis miring terbalik; ini berguna jika Anda ingin mencocokkan string literal arbitrer yang mungkin memiliki karakter meta ekspresi reguler di dalamnya.
Pada Python 3.7 re.escape()
telah diubah untuk menghindari hanya karakter yang berarti untuk operasi regex.
regex.escape(pattern,string,special_only=True
Saya terkejut tidak ada yang menyebutkan menggunakan ekspresi reguler melalui re.sub()
:
import re
print re.sub(r'([\"])', r'\\\1', 'it\'s "this"') # it's \"this\"
print re.sub(r"([\'])", r'\\\1', 'it\'s "this"') # it\'s "this"
print re.sub(r'([\" \'])', r'\\\1', 'it\'s "this"') # it\'s\ \"this\"
Hal penting yang perlu diperhatikan:
\
serta karakter yang Anda cari. Anda akan menggunakan \
untuk melarikan diri karakter Anda, sehingga Anda perlu untuk melarikan diri
yang juga.([\"])
, sehingga
pola substitusi dapat menggunakan karakter yang ditemukan saat ditambahkan \
di depannya. (Itulah
\1
fungsinya: menggunakan nilai dari grup dalam tanda kurung pertama.)r
depan r'([\"])'
berarti itu adalah string mentah . String mentah menggunakan aturan berbeda untuk menghindari garis miring terbalik. Untuk menulis ([\"])
sebagai string biasa, Anda perlu menggandakan semua garis miring terbalik dan menulis '([\\"])'
. String mentah lebih ramah saat Anda menulis ekspresi reguler.\
untuk membedakannya dari garis miring terbalik yang mendahului grup substitusi, misalnya \1
, karenanya r'\\\1'
. Untuk menulis
bahwa sebagai string biasa, Anda akan perlu '\\\\\\1'
- dan tak seorang pun ingin itu.Gunakan repr () [1: -1]. Dalam kasus ini, tanda kutip ganda tidak perlu di-escape. Potongan [-1: 1] digunakan untuk menghapus kutipan tunggal dari awal dan akhir.
>>> x = raw_input()
I'm "stuck" :\
>>> print x
I'm "stuck" :\
>>> print repr(x)[1:-1]
I\'m "stuck" :\\
Atau mungkin Anda hanya ingin melepaskan frasa untuk ditempelkan ke program Anda? Jika ya, lakukan ini:
>>> raw_input()
I'm "stuck" :\
'I\'m "stuck" :\\'
repr(x)[2:-1]
print(repr("I'm stuck")[1:-1])
cetak I'm stuck
.
Seperti yang telah disebutkan di atas, jawabannya tergantung pada kasus Anda. Jika Anda ingin meng-escape string untuk ekspresi reguler maka Anda harus menggunakan re.escape (). Tetapi jika Anda ingin keluar dari sekumpulan karakter tertentu, gunakan fungsi lambda ini:
>>> escape = lambda s, escapechar, specialchars: "".join(escapechar + c if c in specialchars or c == escapechar else c for c in s)
>>> s = raw_input()
I'm "stuck" :\
>>> print s
I'm "stuck" :\
>>> print escape(s, "\\", ['"'])
I'm \"stuck\" :\\
Tidak sesulit itu:
def escapeSpecialCharacters ( text, characters ):
for character in characters:
text = text.replace( character, '\\' + character )
return text
>>> escapeSpecialCharacters( 'I\'m "stuck" :\\', '\'"' )
'I\\\'m \\"stuck\\" :\\'
>>> print( _ )
I\'m \"stuck\" :\
characters
itu sebaiknya menjadi yang pertama!
Jika Anda hanya ingin mengganti beberapa karakter, Anda dapat menggunakan ini:
import re
print re.sub(r'([\.\\\+\*\?\[\^\]\$\(\)\{\}\!\<\>\|\:\-])', r'\\\1', "example string.")