字符串解析 Python

面向初学者和专家的Python字符串解析

Florian Zyprian

Python 提供了多种处理字符串的方法。在这篇博文中,我们将首先介绍Python中字符串解析的基础知识,并阐明字符串索引和字符串序列的区别。

字符串索引

在Python中,一个字符串是一串字符。这些字符可以通过一个索引来访问,这个索引用于 0 开始。这允许你访问一个字符串的第一个、第二个和第三个字符:

text = "Python"
print(text[0]) # 输出'P'。
print(text[1]) # 输出'y'。
print(text[2]) # 输出't'。

你也可以使用负数索引来访问字符串末端的字符:

print(text[-1]) # 输出'n'。
print(text[-2]) # 输出'o'。
print(text[-3]) # 输出'h

字符串序列

字符串序列是一个字符串的一部分,由起始和结束索引指定。在Python中,你可以使用所谓的切分语法来访问字符串的一部分:

pythonCopy代码text = "Python"
print(text[0:3]) # 输出'Pyt'。
print(text[1:4]) # 打印'yth'。
print(text[:2]) # 输出'Py'(没有初始索引,它对应的是索引0)
print(text[3:]) # 输出'hon'(没有结束索引,它对应于索引+1)。

切片语法也适用于负数指数:

print(text[-3:-1]) # 输出'ho'。
print(text[:-2]) # 输出'Pyth'。

总结一下字符串索引和字符串序列之间的区别:字符串索引是指访问字符串中的单个字符,而字符串序列是指访问字符串的一部分。

Python中分裂方法的一个用例:版本号和提交散列值

在很多情况下,例如在处理软件项目时,我们经常需要从组合字符串中提取信息。例如,让我们拿一个包含版本号和提交哈希值的字符串:"2.7.0_bf4fda703454"。为了分离这些信息,我们可以使用 拆分()-Python中的方法。

version_hash = "2.7.0_bf4fda703454"
version_hash_list = version_hash.split("_")

结果是一个字符串的列表,看起来像这样:

['2.7.0', 'bf4fda703454']

这里的字符串在每个下划线处都被分开。如果你希望分离只发生在第一个下划线之后,你可以使用以下方法 拆分() 的参数是可选的 1 使用:

version_hash.split("_", 1)。

如果你确定该字符串包含下划线,你甚至可以将左右两部分解压到单独的变量中:

lhs, rhs = version_hash.split("_", 1)
print(lhs) # 输出 "2.7.0"。
print(rhs) # 输出 'bf4fda703454'。

一个替代的方法是 拆分()-方法是使用 分区().其用法与上一个例子类似,只是这里返回的是三个组件而不是两个。这个方法的主要优点是,如果字符串不包含分隔符,它就不会失败。

一般来说, 拆分()-方法是一种在Python中分割和处理组合信息的实用方法。在我们的例子中,我们可以很容易地把版本号和提交哈希值分开。

用正则表达式进行字符串解析 - Regex

在Python中用命名的regex组分解文本,并权衡与传统函数(如Python字符串索引、排序或分割方法)的优劣。

当我们有复杂的字符串,由于模式或困难的标点符号需要分解时,正则表达式可以帮助识别和分解这些模式。

下面是一个在Python中用命名的重写组进行字符串解析的代码例子:

导入 re
# 示例文本
text = "Max Mustermann,年龄:30,城市:柏林"。
# 带命名分组的正则表达式
pattern_text = r'(?P[A-Za-zäöüÄÖßs]+),\s+age:\s+(?P\d+)\s+years,\s+city:\s+(?P[A-Za-zäöüÄÖßs]+)'
# 编译正则表达式
pattern = re.compile(pattern_text)
# 在文本中搜索匹配项
match = pattern.match(text)
# 检查是否找到匹配项
如果匹配
    # 提取命名分组。
    name = match.group('name')
    age = match.group('age')
    城市 = match.group('city')
    # 输出提取的信息
    print(f "姓名:{name}")
    print(f "年龄:{age}")
    print(f "city: {city}")
else:
    print("No match found.")

在这个例子中,我们有一个包含一个人的姓名、年龄和城市的样本文本。我们使用带有命名组的正则表达式来从文本中提取相关信息。这些组的名称如下:

  • 名称: 为人名
  • 年龄:为人的年龄
  • 城市:该人居住的城市

正则表达式编译完成后,我们在文本中搜索匹配的内容。如果找到了匹配项,我们就提取命名的组,并输出提取的信息。

优势。

  1. 灵活性:正则表达式在文本分析中具有高度灵活性,可以识别复杂的模式。
  2. 紧凑:正则表达式通常比传统方法更短、更简洁。
  3. 命名的组:通过命名的组,我们可以很容易地识别和提取模式的一部分。

劣势:

  1. 学习曲线:正则表达式的学习曲线比较陡峭,通常比传统方法更难阅读和理解。
  2. 适用性有限:正则表达式不适合于深度嵌套的文档,如HTML、XML或 JSON.

Python字符串索引、排序或分割方法:传统的功能,如Python字符串索引、排序或分割方法,很适合于简单的文本分析任务,其中字符串的结构是清晰和简单的。

优势。

  1. 简单性:传统方法易于理解和实施。
  2. 可读性:对于熟悉Python的开发者来说,代码更容易阅读和理解。

劣势:

  1. 有限的灵活性:这些方法在分析复杂的文本模式时提供的灵活性较小。
  2. 更长的代码:在试图识别和分解复杂的模式时,代码会变得更长,更混乱。

自动化的Python Regex

在这个例子中,我们展示了如何使用Konfuzio的SDK来自动创建regex。我们使用SDK为标签""创建一个自定义的重词标记器。合同日期"来创建。进一步的信息可在 技术文件 并在一个 更多博客文章 来找。

从 konfuzio_sdk.data 导入项目
from konfuzio_sdk.tokenizer.regex import RegexTokenizer
从 konfuzio_sdk.tokenizer.base 导入 ListTokenizer
# 将 YOUR_PROJECT_ID 和 YOUR_CATEGORY_ID 替换为项目和类别的相应 ID。
my_project = Project(id_=YOUR_PROJECT_ID)
category = my_project.get_category_by_id(id_=YOUR_CATEGORY_ID)
tokenizer = ListTokenizer(tokenizers=[])
label = my_project.get_label_by_name("ContractDate")
# 查找与标签"合同日期 "出现相关的 regex 表达式匹配
for regex in label.find_regex(category=category):
    regex_tokenizer = RegexTokenizer(regex=regex)
    tokenizer.tokenizers.append(regex_tokenizer)
# 使用创建的 regex 令牌器为文档中的每个匹配字符串创建注释。
# 将 YOUR_DOCUMENT_ID 替换为文档的相应 ID。
document = my_project.get_document_by_id(YOUR_DOCUMENT_ID)
tokenizer.tokenize(document)

在这个代码片断中:

  1. 让我们从Konfuzio SDK中导入所需的类和函数。
  2. 让我们创建一个 项目通过指定项目ID的方式来实现-对象。
  3. 我们是否能得到一个 类别-通过指定类别ID的方式,对对象进行分类。
  4. 让我们创建一个空的 列表标记器.
  5. 我们是否能得到 标签-标签的对象"合同日期„.
  6. 让我们来寻找以出现""为开头的重组词表达式。合同日期"的训练数据类别。
  7. 让我们把找到的每个重合表达式作为一个 RegexTokenizer列表标记器 补充说。
  8. 让我们使用创建的regex标记器来为文档中的每个匹配字符串创建注释。要做到这一点,我们指定文档的ID并调用 tokenize()-符号化器的方法。

在创建了标记器之后,你可以用它来自动生成标签""的重码表达式。合同日期"在你的文件中,并为它们创建注释。

    您的公司正在寻找新的人工智能人才吗?

    为您的公司提供一流的人工智能人才

    专业调解,事半功倍: 我们的合作伙伴 Opushero 可帮助您找到最优秀的人才。这是一个由专业咨询机构组成的网络,为有抱负的年轻人和经验丰富的人工智能开发人员提供支持。接收预审合格的候选人建议,他们希望与您一起开始工作。

    关于我

    更多精彩文章

    笔记本LM

    新闻:谷歌推出人工智能应用NotebookLM

    两个月来,对人工智能感兴趣的人们一直在等待谷歌 "尾风计划 "的测试阶段--这是一款由人工智能支持的组织...

    阅读故事
    笔记本电脑前的各种文件工具,用手

    文件理解:理解文件的技术

    文档理解是一个包含一系列技术和工艺的领域,旨在从非结构化文档中提取信息,并在此基础上对信息进行分析。

    阅读故事
    被动收入

    作为一个数据工程师和数据科学家的被动收入

    人工智能(AI)和机器学习的世界正在迅速发展,对合格数据工程师和机器学习工程师的需求也在不断增长。

    阅读故事
    箭头向上