前言
又是按往常一样刷leetcode,需要了65. 有效数字了,一想字符串匹配,就想到了永远的神——正则匹配,但是在匹配过程中需要了很多问题,将代码和问题记录以下。
基础知识:Python正则表达式
代码
class Solution:
def isNumber(self, s: str) -> bool:
# 整数
integer = re.search(r'^[+-]?[\d]+', s)
if integer and integer.group() == s:
return True
# 小数
decimal = re.search(r'^[+-]?(([\d]+\.[\d]+)|([\d]+\.)|(\.[\d]+))', s)
if decimal and decimal.group() == s:
return True
# 科学计数法
science = re.search(r'^(([+-]?[\d]+)|[+-]?(([\d]+\.[\d]+)|([\d]+\.)|(\.[\d]+)))[eE][+-]?[\d]+', s)
if science and science.group() == s:
return True
return False
问题
- 使用哪种匹配函数?
此处推荐使用search,因为在确定只有一个内容是时,使用search方法可以提高效率。虽然默认的group()或group(0)也表示珍整个匹配。 - 如何保证某些内容要么不出现要么只出现一次?
很自然的想到了?
,但是没想到[]
中表示出现的内容。 - 选择表达式(
|
)的使用?
它最大的特点是从左到右匹配,一旦匹配成功就不会继续下去。因此我们需要考虑可选正则表达式的顺序,同时我们还需要考虑将分组的正则表达式使用()
括起来,要不然范围就是整个表达式。
后记
对于正则表达式其实就是要多写多思考,要不然作为一个新手写一中午就为了有效数字,实属尴尬。溜了溜了,去做实验吧!