为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梵蒂冈之花 2023-09-19 14:21:45
我有一个大文本文件,其中包含如下表所示的输入列表。我需要的是将其分成不同的列(前缀、根和后缀)。他们之间有-和。#我需要一个公式来用-和分隔它们#;或者如果有斜杠/,则应取第一部分并忽略斜杠后面的单词;或者如果这个词在里面,{}它也应该忽略它。Input             Outputform              prefix        root         suffix    ----------        -------       -------      -------jalan                           jalanba-jalan          ba            jalanpem-porut#an      pem           porut        andaun #kulu                      daun         kuludaun#kulu                       daun         kulutarik-napas       tarik         napastarik#napas                     tarik        napasn-cium #bo        n             cium         bowarau/araw                       arauimbaw//nimbaw                   imbawdengo | nengo                   dengododop=am                        dodop        am{di} dalam                      dalamdi {dalam}                      di
查看完整描述

1 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

这是通过 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的单个字符/

  • +- 实际上,前面的一个或多个,尽可能多

  • )- 捕获结束

  • -- 只要所有这些都以破折号结尾-

  • )?- 所有这些都是可选的;如果跳过此步骤将允许整体表达式匹配,则正则表达式引擎会(但如果可能的话,它仍然会更喜欢匹配 - 这称为“贪婪匹配”)。

请注意如何[^-#{}/]+不断出现在所有这些组中。我们不想让我们捕获的文本与分隔符之一匹配。

您没有指定如何处理空格,因此这只是将它们视为任何其他字符。也许您也想在它们与分隔符相邻时将它们排除在组之外?


查看完整回答
反对 回复 2023-09-19
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信