簡體   English   中英

如何使用正則表達式刪除 python 中某個字符串的前導和尾隨非字母數字字符?

[英]How to remove leading and trailing non-alphanumeric characters of a certain string in python using regex?

如何在某個 substring 之前和之后刪除給定字符串中的前導和尾隨非字母字符? 請參閱下面的示例

input_string = m#12$my#tr!#$g%

output_string = m12my#tr!g

在這種情況下,substring 是my#tr!

給定輸入字符串,如何獲得輸出字符串?

我在下面的嘗試刪除了所有前導字符(包括字母數字)。 請參閱下面的代碼片段)。 我嘗試修改\W+而不是.+這不起作用。

import re
input_string = "m#12$my#tr#$%"
output_string = re.sub(r'.+?(?=my#tr!)', '', "m#12$my#tr!#$g%")

感謝任何關於我如何為此目的使用正則表達式模式的想法。

一種方法是圍繞所需的 substring 拆分字符串,替換第一部分和最后一部分中的非字母數字字符,然后重新組合字符串:

import re

input_string = "m#12$my#tr!#$g%"
mid = 'my#tr!'
first, last = input_string.split(mid)
first = re.sub('[^a-z0-9]', '', first)
last = re.sub('[^a-z0-9]', '', last)

output_string = first + mid + last
print(output_string)

Output:

m12my#tr!g

如果您使用 PyPi 中的regex模塊,您可以利用可變長度的lookbehinds 並替換目標字符串之前或之后的任何非字母數字字符:

import regex

input_string = "m#12$my#tr!#$g%"
mid = 'my#tr!'
output_string = regex.sub(rf'[^a-z0-9](?=.*{mid})|(?<={mid}.*)[^a-z0-9]', '', input_string)
# 'm12my#tr!g'

請注意,如果mid包含正則表達式特殊的字符(例如. [ { $ ^等),則應在使用前對其進行轉義,即

mid = 'my#tr!'
mid = regex.escape(mid)

如果您根本不想使用正則表達式,您可以手動將非字母數字字符從第一個和最后一個部分中去除。 例如:

import string

input_string = "m#12$my#tr!#$g%"
mid = 'my#tr!'
first, last = input_string.split(mid)
first = ''.join(c for c in first if c in string.ascii_letters + string.digits)
last = ''.join(c for c in last if c in string.ascii_letters + string.digits)
output_string = first + mid + last

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM