相关文章推荐
斯文的跑步机  ·  Xamarin.Android 9.4 - ...·  3 年前    · 

用正则匹配的方法,替换掉目标字符串为空,具体示例如下:

s = "我是一个人(中国人)aaa[真的]bbbb{确定}"
a = re.sub(r"\(.*?\)|\{.*?\}|\[.*?\]", "", s)
print(a)
output:
我是一个人aaabbbb

解释:正则匹配的规则也是从左往右开始匹配的。因为括号()在正则匹配中有特殊用法,所以这里用\(和\)的方式匹配正反括号。“.”表示匹配任意初换行之外的字符,“*”表示匹配其前面的字符0次或无数字,那这样的话,"\(.*"这个表示匹配的字符串以正括号开始,后面0个或者任意个数的非换行字符。

关于“?”的使用:

(1)如果是跟在一般符号后面,则表示匹配表达式0次或1次。比如“do(es)?”,这里就是表示匹配一定以do开头,但是es出现0次或者1次。所以“do(es)?”可以匹配的字符串包括“does”和“do”。在正则匹配中,( pattern )表示匹配 pattern 并获取这一匹配,要匹配圆括号字符,则使用 '\(' 或 '\)'。

(2)如果是跟在任何一个其他限制符 (*, +, ?, { n }, { n ,}, { n , m }) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。关于贪婪和非贪婪匹配可以看底下的例子。

2、贪婪匹配和非贪婪匹配

对于贪婪和非贪婪的的影响,在实践中,觉得最大的影响就是对括号的匹配。

s = "我是一个人(中国人)哈哈哈哈哈(真的)bbbb{确定}"
# 非贪婪模式
print(re.findall(r"\(.*?\)", s))
# 贪婪模式
print(re.findall(r"\(.*\)", s))
输出结果:
['(中国人)', '(真的)']
['(中国人)哈哈哈哈哈(真的)']

2、只替换括号内的内容

s = "我是一个人(中国人)aaa[真的]bbbb{确定}"
b = re.sub(r"(?<=\().+?(?=\))|(?<=\[).+?(?=\])", "hahah", s)
print(b)
output:
我是一个人(hahah)aaa[hahah]bbbb{确定}

3、文本分句

参考文章:

正则表达式(括号)、[中括号]、{大括号}的区别小结

Python 正则式学习笔记

本文是在实际处理文本时遇到的两个应用。1、剔除括号及括号内的数据 用正则匹配的方法,替换掉目标字符串为空,具体示例如下:s = "我是一个人(中国人)aaa[真的]bbbb{确定}"a = re.sub(r"\((.*?)\)|\{(.*?)\}|\[(.*?)\]", "", s)print(a)output:我是一个人aaabbbb 加上剔除文本中的各种标点符号,例子如下:s = "我是一个人(中国人)aaa[真的]bbbb{确定}''""?::”“"a =...
项目上碰到一个需求,是取多个递增文件的文件名,类似于test(1).txt、test(2).txt,但是不需要 括号 ,只要test1、test2这种格式,最开始想到的办法就是js里的replace 替换 ,先上一个比较笨但是也能实现效果的例子 let name = "test(1).txt" let data = name.split('.')[0].replace('(', '').replace(')', '') console.log(data) // test1 首先是将name用split()方法分割
Python 实现 正则 的方式是通过re(regular expression的缩写)模块来实现的,你可以调用re模块的各种方法来实现不同的功能,下面我们就来说下,在 Python 通过re模块可以调用那些方法,以及这些方法的作用都是什么;还有就是 正则 的实例以及各种特殊符号的含义:   1、re.sub和replace:     sub的全拼是substitute,也就是 替换 的意思;既然知道是 替换 了,那就很容易用到实例 了,其实replace也是 替换 的意思,只不过它们的用法不太相同,下面用一个例子来详细说明下它们的异同之处: >>> import re >>> str1 = 'Hello
string1 = '海堤(段)终点坐标(东经)(度)' string2 = "分(泄)洪闸(节制闸、排退水闸、引进水闸、挡潮闸)设计过闸流量" string3 = '就医地点分类(本统筹地区、(地级)市内跨统筹地区、省内跨统筹地区、省外就医)' 1. 正则匹配 串前加了r就是为了使得里面的特殊符号不用写反斜杠了。 2.[ ]具有去特殊符号的作用,也就是说[(]里的(只是平凡的 括号 3. 正则匹配 串里的()是为了提取整个 正则 符合 括号
一、 什么是组 关于组匹配模式, Python 官网上说得比较简单,也没有这个名词,只有组这个名词,老猿查了比较多的资料和做了相关测试之后才理解。 组匹配模式,就是在匹配的 正则表达式 使用小 括号 “()”括起来的任意一个合法的匹配模式串,左 括号 标记组的起点,右 括号 标记组的终点,即组匹配模式定义为: (组匹配模式串) 其 组匹配模式串是整个 正则表达式 的一个子匹配模式。在一个 正则表达式 内可以定义多个组,每个...
最近在做处理 文本 的相关工作,需要对已有 文本 进行修改,如增加 内容 ,删除 内容 替换 内容 等。所以对re.sub的使用比较频繁。 为什么要使用 正则 替换 ,因为在编码过程 ,读取文件 内容 字符串 后,如果是对数组进行操作,当需要将查找到的 内容 替换 时,如果 替换 内容 长度大于查找 内容 长度,将会修改原有 文本 需要保留的 内容 。等等还有很多这种需要考虑空出位置的问题。所以使用re.sub来进行操作。 首先构建一个 正则表达式 ...
import re bracket = re.compile(r'\([^()]+\)') # 寻找最内层 括号 规则 mul = re.compile(r'(\d+\.?\d*\*-\d+\.?\d*)|(\d+\.?\d*\*\d+\.?\d*)') # 寻找乘法运算规则 div = re.compile(r'(\d+\.?\d*/-\d+\.?\d*)|( def split_into_sentences(text): tokenizer = nltk.data.load('tokenizers/punkt/english.pickle') return tokenizer.tokenize(text) text = "这是一段 文本 。它包含了几个句子。" sentences = split_into_sentences(text) print(sentences) # 输出: ['这是一段 文本 。', '它包含了几个句子。'] 这段代码使用了 `nltk` 库 的 `punkt` 分词器来对 文本 进行 分句 。它首先加载了英文的 分句 器,然后使用 `tokenize` 方法将 文本 分割为句子列表。 你可以使用这段代码来对 文本 进行 分句 ,只需要将 `english.pickle` 替换 为适用于 文的 分句 器文件即可。例如,你可以使用 `chinese.pickle` 作为 分句 器文件,但是需要注意的是,你需要确保 `nltk` 库 包含了适用于 文的 分句 器文件。