jquery怎么用正则表达式保留数字和负数_字符串保留特定字符

欢迎打开本公众号第59篇推送。欢迎来到小璇儿的知识分享系列第1期!请想象此处有掌声。 进入正文之前,先来几句闲聊。 三年来,我经常在各种平台上浏览关于“如何运营好个人订阅号”的话题。无一例外,所有成功的自媒体运营者都说:首先,要有一个明确的定位。 从初心出发,“小小的自由天地”其实是没有定位的。但我并不希望文章的类型过于零散,以至于影响读者的体验。 于是,从今天起,本号决定推出若干个系列,每个系列下收录同类型的文章,这样既能使原本杂乱无章的推文形成体系,也能更好地激发我的创作热情。 真心想把公众号长久办下去的我,却时常囿于缺乏创作灵感的苦恼之中。因此,我想,不如设立一个不需要过多文艺细胞的知识分享系列,同大家畅谈各种简单而有趣的知识技能,我也算是做出了一点微薄的贡献。 这也属于一种创作。通过看我的科普文,就可以窥探出我的行事风格,这一点我以后再聊。 俗话说,人生苦短,我用Python。作为我最喜欢的编程语言,Python当仁不让地成为本系列首位登场的重磅嘉宾。 声明:本文仅面向编程初学者,大神勿入!如有错误和不足,请多多指教! leetcode上有一道很简单的题目: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,忽略字母的大小写。 将题目拆解成两部分: 第一,处理字符串,使其只保留字母和数字,且字母统一大小写; 第二,验证回文串。 本文先来讲讲第一部分。 改变字母大小写很简单,用内置函数即可。重点在于只保留字母和数字字符。 我首先想到的是正则。对于正则,我并不是很会。难者不会,会者不难,我觉得它太难了,完全不适合我这种又懒又笨的猪脑子,向来是现用现查。这一查,就查出两种方法。 算上不用正则的,总计3种方案,且听我一一道来。 一、用re.sub()函数替换。 re.sub(pattern, repl, string, count = 0, flags = 0) 这个函数一般只需要掌握前三个参数: pattern,正则中的模式字符串。 repl,希望被替换成的字符串。 string,要被处理的原始字符串。 返回处理过的字符串。 如果完全不懂正则表达式,pattern还是挺难理解的。在以后的知识分享系列里,我会写一写关于正则表达式的内容。 举个例子:
re.sub("[a-zA-Z0-9]", "", mystr) # 把字符串中的字母和数字都弄没
第一个参数,模式字符串,表示所有的字母和数字; 第二个参数,希望被替换成的字符串,是个空字符串; 第三个参数,希望被处理的原始字符串,变量名为mystr; 返回结果是处理过的字符串。 那么替换的逻辑就很好理解了。想只保留某种字符,就把除了该类字符以外的所有字符都替换成空字符串。 但这样有点不方便。如果只想保留中文,那么为了替换掉其他所有字符,就要在模式字符串里把其他所有类型的字符,包括字母、数字、特殊字符等等,全面地枚举一遍,写不全的话就会有漏网之鱼。 于是咱们改进一下做法:
re.sub("[^a-z^A-Z^0-9]", "", mystr) # 只保留字母和数字,其他的都弄没
把除了字母和数字以外的东西都弄没。我可真是个小机灵鬼! 所以,如果想只保留中文,就可以这样写:
re.sub("[^\u4e00-\u9fa5]", "", mystr) # 只保留汉字,其他的都弄没
这种思路就比较直截了当。 二、用re.findall()函数查找。 re.findall(pattern, string, flags = 0) 这个函数一般只需要掌握前两个参数: pattern,正则中的模式字符串。 string,要被处理的原始字符串。 返回所有与模式相匹配的字符的列表。
re.findall("[a-z]",mystr) # 返回字符串中所有小写字母的列表
得到列表之后,再来一个把序列连接成字符串的join方法,大功告成!
''.join(re.findall("[a-z]",mystr)) # 只保留小写字母,其他的都弄没
如果用正则,sub替换和findall查找这两种方法均可,用哪个就看个人喜好。 然而,做leetcode算法题,一般来说是用不着调用库的。 官方标答是如何做到只保留字母和数字的呢?请看:
sgood = "".join(ch.lower() for ch in s if ch.isalnum())
也就是第三种方法: 三、字符串内置函数+列表推导式。 什么叫专业啊?一般人,看什么都觉得似曾相识,但是到了实际要用的时候就两眼一抹黑,什么都想不起来,比如我。而那些真正融会贯通、运用自如的人,才叫真的专业。 一开始看到python字符串拥有一堆诸如isalnum(), isalpha(), isdigit(), islower(), isupper()函数的时候,我还不以为意,想不到竟有如此妙用! 令我稍感欣慰的是,经过测试,这个方法比用正则的运行速度慢。看来正则还是有其用武之地的! 只保留字符串的特定字符,你学会了吗? 下期预告: 验证回文串 参考资料: https://leetcode-cn.com/problems/valid-palindrome/solution/yan-zheng-hui-wen-chuan-by-leetcode-solution/ https://docs.python.org/2/library/re.html https://www.runoob.com/python3/python3-string.html

5e73f69bfdf4e8ce78f4cb667570fa08.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值