[英]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.