首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在正则表达式中逐字逐句地挑选单词

在正则表达式中逐字逐句地挑选单词
EN

Stack Overflow用户
提问于 2021-11-23 11:38:57
回答 2查看 91关注 0票数 2

假设我有以下案文:

代码语言:javascript
复制
test = '\n\nDisclaimer ...........................\t10\n\nITOM - IT Object Model ...............\t11\n\nDB – Datenbank Model..................\t11\n\nDB - Datenbank Model - Views .........\t12'

看上去像是:

代码语言:javascript
复制
Disclaimer ...........................  10

ITOM - IT Object Model ...............  11

DB – Datenbank Model..................  11

DB - Datenbank Model - Views .........  12

我想列一张清单,列出我得到的内容:

代码语言:javascript
复制
['Disclaimer', 'ITOM - IT Object Model', 'DB – Datenbank Model', 'DB - Datenbank Model - Views' ]

因此,我做以下几点:

代码语言:javascript
复制
re.findall(r'^[a-zA-Z\%\$\#\@\!\-\_]\S*', test1, re.MULTILINE)

返回:

代码语言:javascript
复制
['Disclaimer', 'ITOM', 'DB', 'DB']

我不知道为什么我的RegEx不选-后面的单词

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-23 11:49:10

您可以在这里使用regex和non方法:

代码语言:javascript
复制
[line.split('...')[0].strip() for line in test1.splitlines() if line.strip()]
[re.sub(r'\s*\.+\s*\d+\s*$', '', line) for line in test1.splitlines() if line.strip()]
re.findall(r'^(.*?)[^\S\n]*\.+[^\S\n]*\d+[^\S\n]*$', test1, re.M) 

Python演示

备注:

  • 文本被分割成几行。
  • 如果行为空,则删除该行。
  • 要么用三个点来分割线,然后得到第一个块
  • 或者,如果您更喜欢regex,请删除带有可选空格的点,然后是数字,可能还有尾随空格。

或者,如果您更喜欢完全regex方法(请参阅上述代码段中的第三行代码),您可以使用re.findall^(.*?)[^\S\n]*\.+[^\S\n]*\d+[^\S\n]*$模式:

  • ^ -行的开始
  • (.*?) -第1组:除行中断字符以外的任何零或多个字符,尽可能少
  • [^\S\n]* --零或多个水平空白空间
  • \.+ -一个或多个点
  • [^\S\n]* --零或多个水平空白空间
  • \d+ -一个或多个数字
  • [^\S\n]* --零或多个水平空白空间
  • $ -线路的尽头。

regex演示

票数 2
EN

Stack Overflow用户

发布于 2021-11-23 11:50:33

我提出了另一种方法,用不同的准则。替换不需要的字符,而不是找到所需的字符,因为这似乎很容易为您的情况。

见下文:

代码语言:javascript
复制
contents = re.sub(r"\s?(\.)+\s+(\d)+\b", "", text, re.MULTILINE).splitlines(keepends=False)

这将产生您想要的内容列表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70080225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档