【发布时间】:2020-05-29 13:48:23
【问题描述】:
问题示例:
str1 = "ur a sh * tty comment ."
我需要句子中的每个单词,并想用sh***tty 替换sh * tty(用* 替换单词中的那些空格)
如果我尝试:
for word in s.split():
print(word)
我明白了:
ur
a
sh
*
tty
comment
.
sh * tty 现在被分成 3 个单词
sh*tty
但我正好需要这个词 sh * tty,所以我可以用 * 替换空格,最后变成 sh***tty。
我不能简单地用* 替换空格。如果空格在任何英文单词中(典型错误),我只需要用* 替换空格。
我也试过了:
s = "ur a sh * tty comment ."
makeBad = s.translate ({ord(c): "*" for c in " "})
但我不想替换分隔两个单词的空格。
【问题讨论】:
-
你怎么知道单词从哪里开始?
*两边的任意两块文本?试试re.sub(r'\S+ +\* +\S+', lambda x: x.group().replace(' ', '*') , str1)。如果*周围有单个空格,则只需re.sub(r'(\S) (\*) (\S)', '***' , str1)。 -
re.sub(r'(\S) (*) (\S)', '***' , str1) 对我来说可能会很好,但在这种情况下有时我可能会得到 sh % tty 吗?那么它就行不通了。你能稍微修改一下你的第二个代码,这样它就分配了 3 个星号,总之我会从这个列表中看到任何东西吗? "!@#$%^&()[]{};:,./?\|`~-=_+" 也是您提出的第一个解决方案?
-
喜欢
nw = r"[]\s!@#$%^&()[{};:,./<>?\\|`~=_+-]"然后print( re.sub(rf'(\S){nw}\*{nw}(\S)', r'\1***\2' , str1) )?见ideone.com/4FLT2r -
对于 sh @ tty 它不起作用
-
啊,明白了,你需要ideone.com/rtC2nb:
nw = r"[]*!@#$%^&()[{};:,./<>?\\|`~=_+-]",然后是print( re.sub(rf'(\S) {nw} (\S)', r'\1***\2' , str1) )
标签: python regex replace split