我正在try 编写一个Python正则表达式模式,它将允许我捕获给定文本中字母由相同符号或空格分隔的单词.

例如,在文本"This is s u p e r and s.u.p.e.r and s?u?p?e?r and s!u.p!e.r"中,我的目标是提取单词"s u p e r"、"s.u.p.e.r"和s?u?p?e?r.但是,我想排除"s!u.p!e.r",因为它在单词中没有相同的一致分隔符.

我目前正在使用以下内容:

x="This is s u p e r and s.u.p.e.r and s?u?p?e?r and s!u.p!e.r"


pattern = r"(?:\b\w[^\w\d]){2,}"

re.findall(pattern, x)


['s u p e r ', 's.u.p.e.r ', 's?u?p?e?r ', 's!u.p!e.']

我只是好奇是否有可能排除那些没有相同符号的 case .

推荐答案

您可以考虑使用

pattern = r"(?<!\S)\w(?=(\W))(?:\1\w)+(?!\S)"
results = [m.group() for m in re.finditer(pattern, x)]

请看Python demoregex demo.

import re
x="This is s u p e r and s.u.p.e.r and s?u?p?e?r and s!u.p!e.r"
pattern = r"(?<!\S)\w(?=(\W))(?:\1\w)+(?!\S)"
print([m.group() for m in re.finditer(pattern, x)])
# => ['s u p e r', 's.u.p.e.r', 's?u?p?e?r']

Pattern details

  • (?<!\S)-左侧空格边界
  • \w-一个单词字符
  • (?=(\W))--需要下一个字符才能将非单词字符捕获到组1中的积极前瞻(\1)
  • (?:\1\w)+-在组1中捕获的相同字符的一个或多个重复,然后是单个单词字符
  • (?!\S)-右侧空白边界

Python相关问答推荐

如何在telegram 机器人中发送音频?

Python中两个矩阵的自定义Hadamard风格产物

两极:如何分割一个大 pyramid 并并行保存每个

Tkinter滑动条标签.我不确定如何删除滑动块标签或更改其文本

如果索引不存在,pandas系列将通过索引获取值,并填充值

如果条件为真,则Groupby.mean()

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

如何让Flask 中的请求标签发挥作用

C#使用程序从Python中执行Exec文件

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

当从Docker的--env-file参数读取Python中的环境变量时,每个\n都会添加一个\'.如何没有额外的?

部分视图的DataFrame

如何并行化/加速并行numba代码?

在Python 3中,如何让客户端打开一个套接字到服务器,发送一行JSON编码的数据,读回一行JSON编码的数据,然后继续?

在Python中使用if else或使用regex将二进制数据如111转换为001""

在代码执行后关闭ChromeDriver窗口

在Admin中显示从ManyToMany通过模型的筛选结果

如何在Great Table中处理inf和nans

BeautifulSoup:超过24个字符(从a到z)的迭代失败:降低了首次深入了解数据集的复杂性:

GPT python SDK引入了大量开销/错误超时