Python正则化去除字符串标点

Python正则化去除字符串标点

  • 使用re.compile
  • 使用re.sub替换
  • 使用自带匹配规则
  • 参考文档

Python正则化主要依靠的是re这个包,re代表 Regular Expression。是在做leetcode 819. Most Common Word的时候遇到需要处理标点的问题才想着要写一下。
本篇简单介绍去除标点和re的部分函数使用方法,待更新。

使用re.compile

compile可以生成一个简单的pattern,供re.search和re.match使用。

p = re.compile(r"[!?',;.]")
print "p=", p

>>>p = re.compile("[!?',;.]")

p代表的就是re.compile("[!?’,;.]"),这是一个pattern,在文档里一般也是叫这个,如re.match(pattern, string, flags=0),pattern的意义是一个规则,就是你希望匹配到什么样式的字符。
r的意思是不转义,解释如下,引自Python官方文档。

The solution is to use Python’s raw string notation for regular expression patterns; backslashes are not handled in any special way in a string literal prefixed with ‘r’. So r"\n" is a two-character string containing ‘’ and ‘n’, while “\n” is a one-character string containing a newline. Usually patterns will be expressed in Python code using this raw string notation.
解决方案是使用 Python 的原始字符串表示法来表达正则样式;在以 ‘r’ 为前缀的字符串文本中, 反斜杠没有任何转义。 因此,r"\n" 是一个包含 ‘’ 和 ‘n’ 的双字符字符串, 而 “\n” 是包含换行符的一个字符字符串。 我们一般用原始表示法来表达样式。

使用re.sub替换

此函式是将匹配到的字符替换掉。基本语法为re.sub(pattern, repl, string, count=0, flags=0)

  • pattern是模式;
  • repl是替换规则,可以为字符串,也可以是函数;
  • string是被替换的字符串;
  • count是替换的最大次数,默认为0;
  • flag是位置,默认为0;
    意思是将string中符合pattern的字符替换为repl或者按repl规则进行替换。
p = re.compile(r"[!?',;.]")

sub_para = p.sub(' ', paragraph.lower())

sub_para2 = re.sub(p, ' ', paragraph.lower())

以上两种写法意思相同。
由此完成了替换。

使用自带匹配规则

本来之前这样就可以解决问题,但是后来出现了一些test cases让这种做法报错了。
其实,Python的re模块还有很多强大的功能。

’+‘ 对它前面的正则式匹配1到任意次重复。 ab+ 会匹配 ‘a’ 后面跟随1个以上到任意个 ‘b’,它不会匹配 ‘a’。
’?‘ 对它前面的正则式匹配0到1次重复。 ab? 会匹配 ‘a’ 或者 ‘ab’。
’\w‘ 对于 Unicode (str) 样式:
匹配Unicode词语的字符,包含了可以构成词语的绝大部分字符,也包括数字和下划线。如果设置了 ASCII 标志,就只匹配 [a-zA-Z0-9_] 。
对于8位(bytes)样式:
匹配ASCII字符中的数字和字母和下划线,就是 [a-zA-Z0-9_] 。如果设置了 LOCALE 标记,就匹配当前语言区域的数字和字母和下划线。

所以可以之间使用/w+,即可完成替换。

p1 = re.findall(r"\w+", paragraph.lower())

更多黑科技可以参看Python官方文档:https://docs.python.org/zh-cn/3.7/library/re.html。

参考文档

  1. Python中文文档:https://docs.python.org/zh-cn/3.7/library/re.html;
  2. 菜鸟教程:http://www.runoob.com/python/python-reg-expressions.html。
    (菜鸟教程虽然写的不详细,但是有时候查查简单的东西还是挺好用的)

你可能感兴趣的:(Python,Package)