Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中拆分前缀和后缀?_Python_Unix_Nlp - Fatal编程技术网

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

如何在python中拆分前缀和后缀?,python,unix,nlp,Python,Unix,Nlp,我有一个大的文本文件,其中包含一个输入列表,如下表所示。我需要的是将它分成不同的列(前缀、根和后缀)。它们之间有-和#。我需要一个公式,通过-和#将它们分开;或者如果有斜杠/,则应取第一部分并忽略斜杠后的单词;或者,如果单词在{}中,它也应该忽略它 输入输出 形式前缀根后缀 ---------- ------- ------- ------- 雅兰雅兰 巴扎兰巴扎兰 佩姆·波鲁特#佩姆·波鲁特 多恩库鲁多恩库鲁 多恩库鲁多恩库鲁 塔里克·纳帕斯塔里克·纳帕斯

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

输入输出
形式前缀根后缀
----------        -------       -------      -------
雅兰雅兰
巴扎兰巴扎兰
佩姆·波鲁特#佩姆·波鲁特
多恩库鲁多恩库鲁
多恩库鲁多恩库鲁
塔里克·纳帕斯塔里克·纳帕斯
塔里克·纳帕斯塔里克·纳帕斯
n-cium#bo n cium弓
阿劳
imbaw//nimbaw imbaw
登戈|能戈登戈
dodop=am dodoop-am
{di}dalam-dalam
di{dalam}di

这里是一个您似乎在问的问题的粗略近似值,通过Python
re
库使用正则表达式

重新导入
m=re.match(r'(?:{{{{{}/]+})(?:([^-{}/]+)-([^-{}/]+)([^-{}/]+)(?:/[^-{}/]+)(?:([^-{}/]+)(?:([^-{}/]),word)
如果m:
前缀、根、后缀=m.groups()
您的示例似乎也有
=
|
作为分隔符,但一旦您了解了这是如何工作的,将其扩展以允许这些分隔符也应该是相对简单的

简而言之,
re.match()
如果正则表达式不匹配,则返回
False
,否则返回一个match对象,其
.groups()
方法包含与正则表达式中分组括号匹配的文本
(?:…)
括号是非分组的,没有
?:
的括号紧跟在左括号之后捕获到一个组中

表达式可分为以下几部分:

  • (?:\{[^-{}/]+\})
    -非分组表达式,用于跳过
    {brages}
  • (?:([^-#{}/]+)-)
    -在破折号前面的任何内容的分组表达式周围的非分组包装器
    -
  • ([^-#{}/]+)
    -主根-分组表达式以捕获与其中一个分隔符不匹配的文本
  • (?:/[^-#{}/]+)?
    -非分组表达式忽略斜杠后的任何内容
  • (?:#([^-#{}/]+)?
    -类似于破折号,捕获
    #
    之后的任何后缀,在整个组周围使用非分组包装,然后在分隔符后捕获文本的分组捕获
一开始这看起来很吓人,但是一旦你破译了第一对,你应该了解它们是如何工作的。更详细地说,让我们检查破折号表达式

  • (?:
    -我们需要一个非捕获组将所有这些标记为可选的,在末尾
  • -将分组括号之间的任何匹配文本捕获到
    .group()
  • [^-{}/]
    -匹配一个字符,该字符不是
    -
    {
    }
    /
  • +
    -实际上,前面的一个或多个,尽可能多
  • -捕获结束
  • -
    -只要所有这些都以文字破折号结束
    -
  • )?
    -所有这些都是可选的;如果跳过此操作将允许整个表达式匹配,则正则表达式引擎将进行匹配(但它仍然希望匹配,如果可能,这称为“贪婪匹配”)
请注意
[^-#{}/]+
是如何在所有这些组中不断出现的。我们不希望捕获的文本与其中一个分隔符匹配

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


演示:

我们可以看看您尝试过的代码吗?@erip我尝试了太多,使用了我的代码,但没有成功。我堆栈如何为它编写代码。请提供文本作为文本,而不是图像。图像不能复制/粘贴用于实验;那些试图帮助您的人会因为需要自己重新键入您的测试数据而感到气馁。另请看,这看起来像是你在做形态学分析,所以我添加了标签。如果你不能用更有用的东西替换图像,请不要编辑它。我不知道如何处理一个“dengo | nengo”,输出必须是其中之一。感谢您如果既有
|
又有
/
规则需要将它们按正确的顺序排列。如果
|
可以在
/
之后出现,那么就用那个分隔符在另一个组上加上;不难看出如何添加它。如果
|
更像是
/
的同义词,您可以更新规则,将
[/|]
作为其分隔符。无论哪种方式,您都希望更新其他组,使其具有
[^-{}/}]
,而不仅仅是
[^-{}/]
。如果您仍然需要更多帮助,请发布新问题。这一次,请注意查看指南以及如何创建一个新的应用程序。因为您的规则可能重叠,请解释它们是如何相互作用的(就像在真实形态学中一样),或者解释它们为什么不相互作用。请随意在这里用链接ping我。Araman在**答案部分**留下了评论,我没有得到它。请看。谢谢