python - Python,解析多行字符串提取字符和数字子字符串
问题描述
这是我上一个问题的后续,我更清楚地发现了问题,我需要一些进一步的建议:)
我有一个字符串,由一些机器学习算法产生,它通常具有以下结构:
- 在开头和结尾,可以有一些不包含任何字符的行(空格除外);
- 在两者之间,应该有 2 行,每行包含一个名字(只有姓氏,或者名字和姓氏,或者名字的首字母加上姓氏......),然后是一些数字和(有时)其他混合的字符在数字之间;
- 其中一个名称通常以特殊的非字母数字字符(>、>>、@、...)开头。
像这样的东西:
Connery 3 5 7 @ 4
>> R. Moore 4 5 67| 5 [
我需要提取 2 个名称和数字字符,并检查其中一行是否以特殊字符开头,所以我的输出应该是:。
name_01 = 'Connery'
digits_01 = [3, 5, 7, 4]
name_02 = 'R. Moore'
digits_02 = [4, 5, 67, 5]
selected_line = 2 (anything indicating that it's the second line)
在链接的原始问题中,有人建议我使用:
inp = '''Connery 3 5 7 @ 4
>> R. Moore 4 5 67| 5 ['''
lines = inp.split('\n')
for line in lines:
matches = re.findall(r'\w+', line)
print(matches)
这产生的结果非常接近我想要的:
['Connery', '3', '5', '7', '4']
['R', 'Moore', '4', '5', '67', '5']
但是我需要将第二行中的前两个字符串('R','Moore')组合在一起(基本上,在数字开始之前将所有字符组合在一起)。并且,它跳过了特殊字符的检测。我应该以某种方式修复此输出,还是可以完全以不同的方式解决问题?
解决方案
我不确定您希望保留或删除哪些字符,但类似以下内容应该适用于该示例:
inp = '''Connery 3 5 7 @ 4
>> R. Moore 4 5 67| 5 ['''
lines = inp.split('\n')
for line in lines:
matches = re.findall(r'(?:[a-zA-Z.][a-zA-Z.\s]+[a-zA-Z.])|\w+', line)
print(matches)
输出:
['Connery', '3', '5', '7', '4']
['R. Moore', '4', '5', '67', '5']
注意。我包括a-z
(下和上)和点,中间有可选空格:[a-zA-Z.][a-zA-Z.\s]+[a-zA-Z.]
,但你应该根据你的实际需要进行更新。
推荐阅读
- git - RunCloud 部署:您对以下文件 (package-locked.json) 的本地更改将被合并覆盖
- node.js - 使用 Node.js 在 Firebase 中使用 Typescript 进行读写
- python - Python Windows 服务无法生成/写入 CSV
- javascript - 如何判断内联对象标签是否已加载其数据
- elm - 如何将文件加载到 Elm REPL?
- javascript - 如何遍历嵌套对象以检查是否找到 true?
- javascript - TinyMce 4 在初始化后动态添加一个按钮到工具栏
- javascript - 为什么刷新时数据库中只显示一项(Firebase)
- javascript - 设置 CSS 缩放值后,jQuery.position() 在 Chrome 和 Edge 中返回不同的结果
- c - 我是否正确地使用 cURL 模拟 CORS,是否需要实现 OPTIONS 请求