有两种方法。两者都是超级混音,并且极度依赖于原始弦的极小波动。但是,您可以修改代码以提供更多的灵活性。
这两个选项都取决于符合这些特征的生产线...有问题的分组必须...以字母或斜杠开头,可能大写
[感兴趣的标题后跟冒号(“:”)] >>
仅获取冒号后的第一个单词。
方法1,正则表达式,这只能获取两个数据块。第二组是“其他所有内容”,因为我无法使搜索模式正确地重复:P
代码:import re
l = [ 'MC/MX/FF Number(s): None DUNS Number: -- ', 'Power Units: 1 Drivers: 1 ' ]
pattern = ''.join([
"(", # Start capturing group
"\s*[A-Z/]", # Any number of space, until and including only the first capital or forward slash
".+?\:", # any character (non-greedy) up to and including the colon
"\s*", # One or more spaces
"\w+\s*", # One or more alphanumeric chars i.e. [a-zA-Z0-9]
")", # End capturing group
"(.*)"
])
for s in l:
m = re.search(pattern, s)
print("----------------")
try:
print(m.group(1))
print(m.group(2))
print(m.group(3))
except Exception as e:
pass
输出:----------------
MC/MX/FF Number(s): None
DUNS Number: --
----------------
Power Units: 1
Drivers: 1
方法二,逐字解析字符串。此方法与regex具有相同的基本特征,但是可以执行两个以上的感兴趣的块。它的工作原理是...开始逐字解析每个字符串,并将其加载到newstring。
开始逐字解析每个字符串的单词,并将其加载到newstring中。
[当打到冒号时,标记一个标志。
将下一个循环中的第一个单词添加到newstring。您可以根据需要将其更改为1-2、1-3或1-n字。
将newstring添加到newlist,重新设置标志,并保持解析单词。
代码:s = 'MC/MX/FF Number(s): None DUNS Number: -- '
for s in l:
newlist = []
newstring = ""
colonflag = False
for w in s.split():
newstring += " " + w
if colonflag:
newlist.append(newstring)
newstring = ""
colonflag = False
if ":" in w:
colonflag = True
print(newlist)
输出:[' MC/MX/FF Number(s): None', ' DUNS Number: --']
[' Power Units: 1', ' Drivers: 1']
第三选项:使用Natural Language Processing和机器学习实际找出逻辑语句的位置;)