我想刪除首字母縮寫詞中的點,但不要刪除python字符串中的域名。例如, 我希望字符串刪除首字母縮寫詞的正則表達式的正則表達式是什麼?
'a.b.c. [email protected] http://www.test.com'
成爲
'abc [email protected] http://www.test.com'
我做的最接近的正則表達式到目前爲止
re.sub('(?:\s|\A).{1}\.',lambda s: s.group()[0:2], s)
其結果
'ab.c. [email protected] http://www.test.com'
它似乎f或上述正則表達式來工作,我需要正則表達式更改爲
(?:\s|\A|\G).{1}\.
但不存在匹配標記(\ G)在Python結束。
編輯:正如我在我的評論中提到的,字符串沒有特定的格式。這些字符串包含非正式的人類對話,因此可能包含零個,一個或幾個縮略詞或域名。如果能夠讓我免於編碼一個「真正的」解析器,那麼我的一些錯誤就沒有問題了。
恕我直言,一個正則表達式是不您的問題的正確工具。這可能是可能的,但會導致代碼過於複雜。我會採用更傳統的方法,並使用混合正則表達式和Python代碼將字符串拆分爲其組件(普通文本,縮略詞,...),並單獨處理這些部分。更詳細但也更易於維護。 – sebasgo 2009-08-14 17:36:39
我可能應該提到我將它用作一系列其他正則表達式的一部分,用於規範表示非正式人類對話的字符串序列。我可以容忍一些錯誤,如果這會讓我無法進行更徹底的解析。 – ianalis 2009-08-14 21:27:52
您需要更好地指定問題。你的數據總是在三個空間分開的部分,你只想影響第一部分?或者您是否需要將此應用於任意文本?如果後者,你會如何定義一個首字母縮略詞?只有單個字母?如果是這樣,那麼您期望http://a.b.example.com會發生什麼?或者,除非你知道它是域名的一部分,否則你想刪除嵌入的時段?但是,這隻會引出一個問題:它是什麼時候成爲域名的一部分:After @ or http://?那麼ssh:或其他URL方案呢?一旦定義,任何這些將是一個簡單的正則表達式。 – MtnViewMark 2009-08-14 21:46:07