[英]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.。 以下兩個解決方案向您展示了如何一步完成。
全部匹配和拆分是同一枚硬幣的兩面 ,在這種情況下,匹配全部較為安全:
<[^>]+>|(\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組的單詞,我們知道它們是正確的單詞,因為它們與左側的表達式不匹配。
參考
<[^>]+>|[ .]
在|
的左側 ,我們使用<complete tags>
作為分割定界符。 在右側,我們使用空格字符或句點。
產量
This
is
a
string
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.