如何用空格匹配、计数和替换字符串,但它们不是另一个字母字符串的子字符串?
Posted
技术标签:
【中文标题】如何用空格匹配、计数和替换字符串,但它们不是另一个字母字符串的子字符串?【英文标题】:How to match, count and replace string with spaces but which are not substring of another alphabetic string? 【发布时间】:2021-12-16 16:18:04 【问题描述】:我必须在另一个 string
s2
中获取特定 string
s1
的总数。其中s1
可以包含空格。但我必须确保s1
是独立的,或者是带有emoji
、emoticon
或symbol
的子字符串。但不是带有任何 alphabetic
字符的子字符串。以下是一些例子:
假设我们要匹配一个字符串bad word
:
以下是应该匹配的情况:
bad word
This is a bad word.
This are bad word bad word.
This is a bad word also.
This are bad word bad word as well.
bad word:(
bad word????
bad word bad word????????
等等
以下是我们不应该匹配的情况:
This isbad word
bad wordsdsdsd
bad wordbad word
等等
即bad word
应该在它是独立的或作为带有任何emoticon
或emoji
的子字符串时匹配,但不能作为带有任何alphabetic
字符的子字符串。
请注意,字母也可以来自其他语言。
【问题讨论】:
【参考方案1】:我认为您只想匹配\bbad word\b
,并在文本周围加上单词边界:
# -*- coding: utf-8 -*-
import re
inp = ['bad word', 'This is a bad word.', 'This is a bad word also.', 'bad word:(', 'bad word?', 'This isbad word', 'bad wordsdsdsd']
for w in inp:
if re.search(r'\bbad word\b', w):
print("MATCH: " + w)
else:
print("NO MATCH: " + w)
打印出来:
MATCH: bad word
MATCH: This is a bad word.
MATCH: This is a bad word also.
MATCH: bad word:(
MATCH: bad word?
NO MATCH: This isbad word
NO MATCH: bad wordsdsdsd
【讨论】:
对于某些输入inp
,请使用:len(re.findall(r'\bbad word\b', inp))
...您提供的示例数据仅包含单个匹配项。
问题已更新。而且我也需要替换它,因为如果某些输入是 These are bad bad word
并且我们分别找到 bad
和 bad word
,那么它们中的两个应该匹配(我自己处理这种情况,首先匹配较大的并替换它)。因此,匹配bad word
后,计数为1
,输入为This are bad
,之后匹配bad
,计数为2
,输入为These are
(替换后)。
我上面的评论向您展示了如何获得计数。我不会更新我的答案,因为您的新样本数据只有正面案例,所以它并没有像我上面所说的那样理解这一点。
@hafiz031 但是here is a demo 如果您想查看更新的数据。
对于非英语使用这个版本:re.findall(r'(?<!\S)কথা(?!\S)', "কথা")
...顺便说一句,这不是你上面问的,也不是回答的。我强烈建议您停止更改您的问题。以上是关于如何用空格匹配、计数和替换字符串,但它们不是另一个字母字符串的子字符串?的主要内容,如果未能解决你的问题,请参考以下文章