如何在python中分割前缀和后缀?

我有一个大文本文件,其中包含如下表所示的输入列表。我需要的是将其分成不同的列(前缀、根和后缀)。他们之间有-和。#我需要一个公式来用-和分隔它们#;或者如果有斜杠/,则应取第一部分并忽略斜杠后面的单词;或者如果这个词在里面,{}它也应该忽略它。


Input             Output

form              prefix        root         suffix    

----------        -------       -------      -------

jalan                           jalan

ba-jalan          ba            jalan

pem-porut#an      pem           porut        an

daun #kulu                      daun         kulu

daun#kulu                       daun         kulu

tarik-napas       tarik         napas

tarik#napas                     tarik        napas

n-cium #bo        n             cium         bow

arau/araw                       arau

imbaw//nimbaw                   imbaw

dengo | nengo                   dengo

dodop=am                        dodop        am

{di} dalam                      dalam

di {dalam}                      di


梵蒂冈之花
浏览 89回答 1
1回答

有只小跳蛙

这是通过 Pythonre库使用正则表达式对您所要求的内容进行粗略的近似。import re m = re.match(r'(?:\{[^-#{}/]+\})?(?:([^-#{}/]+)-)?([^-#{}/]+)(?:/[^-#{}/]+)?(?:#([^-#{}/]+))?', word) if m:     prefix, root, suffix = m.groups()您的示例似乎也有=和|作为分隔符,但是一旦您了解了它是如何工作的,扩展它以允许这些分隔符应该相对简单。简而言之,如果正则表达式不匹配,则re.match()返回False,否则返回一个匹配对象,该对象的.groups()方法包含与正则表达式中分组括号匹配的文本。(?:...)括号是非分组的,括号中没有?:紧跟在左括号后面的捕获成组。表达式可以分为以下几种:(?:\{[^-#{}/]+\})?- 非分组表达式可跳过其中的任何内容{braces}(?:([^-#{}/]+)-)?- 破折号之前任何内容的分组表达式的非分组包装器-([^-#{}/]+)- 主根 - 分组表达式以捕获与分隔符之一不匹配的文本(?:/[^-#{}/]+)?- 非分组表达式忽略斜杠后的任何内容(?:#([^-#{}/]+))?- 与破折号类似,捕获 后的任何后缀#,用非分组包装器围绕整个组,然后对分隔符后的文本进行分组捕获乍一看这似乎令人生畏,但是一旦您破译了第一对,您就应该了解它们是如何工作的。让我们更详细地检查一下破折号表达式。(?:- 我们需要一个非捕获组将所有这些标记为可选,放在最后(- 将分组括号之间的任何匹配文本捕获到.group()[^-#{}/]- 匹配不是-or #or {or or }or的单个字符/+- 实际上,前面的一个或多个,尽可能多)- 捕获结束-- 只要所有这些都以破折号结尾-)?- 所有这些都是可选的;如果跳过此步骤将允许整体表达式匹配,则正则表达式引擎会(但如果可能的话,它仍然会更喜欢匹配 - 这称为“贪婪匹配”)。请注意如何[^-#{}/]+不断出现在所有这些组中。我们不想让我们捕获的文本与分隔符之一匹配。您没有指定如何处理空格,因此这只是将它们视为任何其他字符。也许您也想在它们与分隔符相邻时将它们排除在组之外?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python