我是Python新手,现在我正试图从一组包含员工相关统计数据的段落中提取信息。你知道吗
例如,该段落可能如下所示:
Name Rakesh Rao Age 34 Gender Male Marital Status Single
整个文本没有任何comas分开,所以我有一个困难的时间来分离这些信息。
有时变量名后面可能有冒号,有时可能没有。例如,在第1行,它是"Name Rakesh Rao"
,但在第2行,它是"Name: Ramachandra Deshpande"
。你知道吗
有大约1400条记录的信息,所以这将是非常伟大的,如果我不必手动分离的信息。 有人能帮忙吗?我会非常感激的!你知道吗
您可以匹配可选字符,在您的情况下,它是
:
与下面的表达式[:]?
。你知道吗根据提供的信息,此正则表达式应提取所需的信息:
你可以检查它here。 此正则表达式将匹配两个单词名。也包含
-'
的名称。 在Python中可能是这样的:您还可以通过上面提供的链接检查这个示例。你知道吗
希望这有帮助。你知道吗
好吧,我想你可以试着用正则表达式来做。 如果你的文字是这样的:
您可以使用这个正则表达式(必须首先
import re
):然后可以使用正则表达式中定义的组的名称,如下所示:
如果所有字段都在一行中,则只需在正则表达式中用单个空格替换
\n
。你知道吗请注意,这将支持在行名后面紧跟一个逗号,如下所示:
但它不支持不同的数据顺序。如果你也愿意的话,我可以试着写一个不同的表达式。你知道吗
表达式的解释
让我们看一下表达式的第一行:
首先,为什么使用
r'…'
字符串语法?这只是为了避免双反斜杠。在“典型”字符串中,我们需要这样写表达式:现在,到实际的表达。第一部分,
Name
,非常明显。你知道吗这部分创建了一个内部带有冒号的非捕获组(
(?:…)
)——它是\:
,而不仅仅是:
,因为冒号本身是regex语法的一部分。非捕获组,因为这个结肠对我们来说真的不重要。你知道吗在一个空格后,我们得到:
这将创建一个命名组,语法为
(?P<name_of_the_group>…)
。我使用命名组只是为了以后更容易更好地提取信息,使用m.group('name')
,其中m
是匹配对象。你知道吗\D+
表示“至少一个非数字字符”。这将捕获所有字母、下划线和空格。这就是为什么字段的顺序对这个特定表达式如此重要。如果要更改顺序并将Gender
字段放在Name
和Age
之间,它也会捕获它,因为+
修饰符是贪婪的。你知道吗另一方面,下一行中的
\d+
表示“至少一个数字字符”,因此介于0和9之间。你知道吗我希望这个解释足够了,但在这个非常有用的网站上,在这里使用这个表达可能会对您有所帮助:
https://regex101.com/r/N5ZJU9/2
我已经为你输入了正则表达式和测试字符串。你知道吗
如果字段名始终在字符串中,则可以拆分这些字段名上的字符串。例如:
如果文本仍然包含其他字符,可以使用
replace(":", "")
删除它们。否则,您可以使用NLTK工具箱从文本中删除所有类型的特殊字符。小心,因为名字里也可能有特殊的字符。你知道吗相关问题 更多 >
编程相关推荐