繁体   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