字符串开头有 n 个特殊标志 FOO ,怎样简单快速的把 FOO 全部去除?

2019-09-19 19:59:23 +08:00
 miniyao

由于历史原因,导致数据库里一些字符串前面被错误的添加了 n 个 FOO 标志,可能的情况如下:

FOO 尊敬的张先生,
FOO FOO 您好!
FOO FOO FOO ... 已经收到您的信件

每一个字符串开头,都有可能出现 n 个 FOO (也可能没有),怎么简单的处理,把字符串开头的 FOO 全部去除? (没有用 replace 和正则 re.sub()的原因,是字符中间部分的 FOO 不能去除)

3445 次点击
所在节点    Python
19 条回复
crayygy
2019-09-19 20:02:25 +08:00
用正则,加上行开头就行了
andyholo
2019-09-19 20:05:47 +08:00
bar 在哪?
lishunan246
2019-09-19 20:10:44 +08:00
^(FOO )*(.*)$
Trim21
2019-09-19 20:19:06 +08:00
不喜欢用正则的话
while s.startswith ():s=s.replace (,,1 )
sunwei0325
2019-09-19 20:36:57 +08:00
miniyao
2019-09-19 20:45:42 +08:00
@crayygy
@lishunan246
@Trim21
@sunwei0325
感谢几位的建议,匹配上了。

从性能上讲,#3 楼 #4 楼 哪个性能会更好些?
crayygy
2019-09-19 20:48:49 +08:00
@miniyao #6 随便 for 循环个十万次算下时间看下呗
Trim21
2019-09-19 20:50:41 +08:00
@miniyao 你实际跑一下试试呗…
Trim21
2019-09-19 20:52:32 +08:00
@Trim21 不过盲猜一个正则效率高
miniyao
2019-09-19 21:11:50 +08:00
@crayygy
@lishunan246
@Trim21
@sunwei0325

跑出来一个非常诡异的情况:

>>> s = '[FOO][FOO][FOO]KO'
>>> re.sub(r'^([\[FOO\]\s])*', '', s)
'KO'

>>> s = '[FOO][FOO][FOO]OK'
>>> re.sub(r'^([\[FOO\]\s])*', '', s)
'K'

KO 和 OK 匹配出来的结果,KO 剩下了 ‘KO’,OK 怎么吧 O 给丢了,只有 K ?
noqwerty
2019-09-19 21:17:57 +08:00
@miniyao 去掉外面的[],你现在匹配的是 [, F, O, ] 和 \s 这些字符
sunwei0325
2019-09-19 21:18:58 +08:00
jinliming2
2019-09-19 21:20:03 +08:00
@miniyao ^(\[FOO\]\s*|FOO\s*)+
miniyao
2019-09-19 21:30:54 +08:00
lululau
2019-09-19 21:50:39 +08:00
update t set c = regex_substr(c, regex, substitution)
ysc3839
2019-09-19 22:05:59 +08:00
@Trim21
@miniyao 四楼的会好一点,但是不需要 replace,既然都 startswith 了,直接 slice 去掉开头那段就好了,replace 还会多一次比较。
noqwerty
2019-09-19 22:07:34 +08:00
@miniyao #14 另外你这种情况直接 s.lstrip("[FOO]") 就可以吧
miniyao
2019-09-19 22:16:27 +08:00
@noqwerty 试过的,里面的 [FOO] 个数不确定,[FOO] 后面可能还有空格,lstrip 可以剥,但搞不干净。
qwertyegg
2019-09-20 00:48:53 +08:00
先 replace("FOO", ""),然后 trim()

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/602286

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX