簡體   English   中英

從單詞的開頭和結尾刪除非字母字符

[英]Remove non-letter characters from beginning and end of a word

我需要從單詞的開頭和結尾刪除所有非字母字符,但如果它們出現在兩個字母之間,請保留它們。

例如:

'123foo456' --> 'foo'
'2foo1c#BAR' --> 'foo1c#BAR'

我嘗試使用re.sub() ,但我無法編寫正則表達式。

像這樣?

re.sub('^[^a-zA-z]*|[^a-zA-Z]*$','',s)

s是輸入字符串。

您可以使用str.strip

In [1]: import string

In [4]: '123foo456'.strip(string.digits)
Out[4]: 'foo'

In [5]: '2foo1c#BAR'.strip(string.digits)
Out[5]: 'foo1c#BAR'

正如馬特在評論中指出的那樣(謝謝,馬特),這只會刪除數字。 要刪除任何非字母字符,

用非字母定義你的意思:

In [22]: allchars = string.maketrans('', '')

In [23]: nonletter = allchars.translate(allchars, string.letters)

然后剝離:

In [18]: '2foo1c#BAR'.strip(nonletter)
Out[18]: 'foo1c#BAR'

有了您的兩個例子,我能夠創建一個使用Python的非貪婪語法描述一個正則表達式在這里 我將輸入分為三部分:非字母,專用字母,然后非字母直到結束。 這是一個測試運行:

1:[123]   2:[foo]   3:[456]
1:[2]   2:[foo1c#BAR]   3:[]

這是正則表達式:

^([^A-Za-z]*)(.*?)([^A-Za-z]*)$

並且mo.group(2)你想要什么,其中mo是MatchObject。

要兼容unicode:

^\PL+|\PL+$

\\PL代表not a letter

試試這個:

re.sub(r'^[^a-zA-Z]*(.*?)[^a-zA-Z]*$', '\1', string);

圓括號捕獲字符串開頭和結尾的非字母字符串之間的所有內容。 ? 確保. 也沒有捕獲任何非字母字符串。 然后替換只是打印捕獲的組。

result = re.sub('(.*?)([a-z].*[a-z])(.*)', '\\\\2', '23WERT#3T67', flags=re.IGNORECASE)

暫無
暫無

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

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