假设我有以下案文:
test = '\n\nDisclaimer ...........................\t10\n\nITOM - IT Object Model ...............\t11\n\nDB – Datenbank Model..................\t11\n\nDB - Datenbank Model - Views .........\t12'看上去像是:
Disclaimer ........................... 10
ITOM - IT Object Model ............... 11
DB – Datenbank Model.................. 11
DB - Datenbank Model - Views ......... 12我想列一张清单,列出我得到的内容:
['Disclaimer', 'ITOM - IT Object Model', 'DB – Datenbank Model', 'DB - Datenbank Model - Views' ]因此,我做以下几点:
re.findall(r'^[a-zA-Z\%\$\#\@\!\-\_]\S*', test1, re.MULTILINE)返回:
['Disclaimer', 'ITOM', 'DB', 'DB']我不知道为什么我的RegEx不选-后面的单词
发布于 2021-11-23 11:49:10
您可以在这里使用regex和non方法:
[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方法(请参阅上述代码段中的第三行代码),您可以使用re.findall和^(.*?)[^\S\n]*\.+[^\S\n]*\d+[^\S\n]*$模式:
^ -行的开始(.*?) -第1组:除行中断字符以外的任何零或多个字符,尽可能少[^\S\n]* --零或多个水平空白空间\.+ -一个或多个点[^\S\n]* --零或多个水平空白空间\d+ -一个或多个数字[^\S\n]* --零或多个水平空白空间$ -线路的尽头。见regex演示。
发布于 2021-11-23 11:50:33
我提出了另一种方法,用不同的准则。替换不需要的字符,而不是找到所需的字符,因为这似乎很容易为您的情况。
见下文:
contents = re.sub(r"\s?(\.)+\s+(\d)+\b", "", text, re.MULTILINE).splitlines(keepends=False)这将产生您想要的内容列表。
https://stackoverflow.com/questions/70080225
复制相似问题