簡體   English   中英

從Python中的字符串中刪除可變長度字符

[英]Removing variable length characters from a string in python

我有以下形式的字符串:

<p>The is a string.</p>
<em>This is another string.</em>

一次從一行文本文件中讀取它們。 我想將它們分成單詞。 為此,我只是使用split()拆分字符串。

現在我有一組單詞,但是第一個單詞是<p>The而不是The 緊跟<>的其他單詞也一樣。 我想從單詞中刪除<..>

我想一行完成。 我的意思是我想像在命令行上一樣將<*>形式的參數作為參數傳遞。 我當時正在考慮使用replace()函數來嘗試執行此操作,但是我不確定replace()函數參數的外觀如何。

例如,如何更改下面的<..> ,這意味着我要包含<>之間的所有內容:

x = x.replace("<..>", "")

不幸的是, str.replace不支持Regex模式。 您需要為此使用re.sub

>>> from re import sub
>>> sub("<[^>]*>", "", "<p>The is a string.</p>")
'The is a string.'
>>> sub("<[^>]*>", "", "<em>This is another string.</em>")
'This is another string.'
>>>

[^>]*匹配零個或多個不是>字符。

無需兩步解決方案

您不需要1.先拆分然后再替換2.。 以下兩個解決方案向您展示了如何一步完成。


選項1:全部匹配而不是拆分

全部匹配和拆分是同一枚硬幣的兩面 ,在這種情況下,匹配全部較為安全:

<[^>]+>|(\w+)

這些詞將在第1組中。

像這樣使用它:

subject = '<p>The is a string.</p><em>This is another string.</em>'
regex = re.compile(r'<[^>]+>|(\w+)')
matches = [group for group in re.findall(regex, subject) if group]
print(matches)

產量

['The', 'is', 'a', 'string', 'This', 'is', 'another', 'string']

討論

此問題是此問題中解釋的“正則表達式匹配模式,不包括...”的技術的典型案例。

交替的左側| 匹配完整的<tags> 我們將忽略這些匹配。 右側匹配並捕獲到第1組的單詞,我們知道它們是正確的單詞,因為它們與左側的表達式不匹配。

參考

選項2:一次拆分

<[^>]+>|[ .]

|的左側 ,我們使用<complete tags>作為分割定界符。 在右側,我們使用空格字符或句點。

產量

This
is
a
string

暫無
暫無

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

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