当前位置: 首页 > 知识库问答 >
问题:

自动将“|”字符转换为换行符,但如果在括号内则不转换?

蒋承教
2023-03-14

给定一个包含有效正则表达式的条目的“字典”,例如:

CARS?|(AUTO|BIG)?TRUCK|VEHICLE|(CRUISE|CONTAINER)? SHIP|AUTOMOTIVE

python中,我如何将每个条目或“字典值”分离到它自己的行上?我不能简单地用|拆分,因为如果您将一个条目值视为本身,(AUTO|BIG)?TRUCK,这将破坏该值,因为它包含相同的字符。

我不仅仅是想匹配这些角色,我还想替换它们。

共有1个答案

卜弘文
2023-03-14

这里至少有两种可能,一种是使用较新的(*跳过)(*失败)机制,另一种是使用函数(首先替换有问题的|):

import regex as re

expressions = r'''CARS?|(AUTO|BIG)?TRUCK|VEHICLE|(CRUISE|CONTAINER)? SHIP|AUTOMOTIVE'''

# first alternative using (*SKIP)(*FAIL)
rx = re.compile(r'\([^()]*\)(*SKIP)(*FAIL)|\|')
parts = "\n".join(rx.split(expressions))
print(parts)

# second, a function 
rx = re.compile(r'\([^()]*\)|(\|)')

def replacer(match):
    if match.group(1):
        return 'SUPERMAN'
    else:
        return match.group(0)

expressions = rx.sub(replacer, expressions)
parts = "\n".join(expressions.split('SUPERMAN'))
print(parts)

双方都会让步

CARS?
(AUTO|BIG)?TRUCK
VEHICLE
(CRUISE|CONTAINER)? SHIP
AUTOMOTIVE
 类似资料:
  • 问题内容: MySQL是否会自动将字符串转换为数字值? 转换如何进行? ‘1234’= 1234吗? ‘1abc’= 1? ‘文本’= 1? 给定那是bigint类型的,该查询将如何解释? 问题答案: 前三个问题的答案是:是,是和否。 当字符串转换为数字时,它将成为value 。 描述类型转换的文档在这里。 对于您的查询: 该摘录摘自文档: 在所有其他情况下,将参数作为浮点数(实数)进行比较。 换

  • 问题内容: 我正在用selenium测试站点,我需要向其中一个字段发送电子邮件。到目前为止,我正在使用以下Java方法: 但是由于(对我而言)一个未知的原因,这正是将这个值发送到字段: (因此,基本上将“ @”替换为“ v”) 出于好奇:我是捷克人,有捷克语键盘。写“ @”符号的一种快捷方式是rightAlt + v,因此我相信可以连接… 因此,我正在搜索始终写有“ @”符号的任何“防弹” met

  • 问题内容: 在Java中,是否有一种简单而优雅的方法将无符号字节值转换为有符号字节值?例如,如果我所拥有的只是int值240(二进制(24位+ 11110000)= 32bits),如何获得该int的带符号值? 问题答案: 除了,Java没有其他无符号值。考虑以下代码段: 结果将为-1,因为最低的8位已复制到byte变量中。

  • 我在尝试将未签名的 char 数组转换为 jstring 时遇到问题。 上下文是我正在使用来自Java的共享c库。所以我正在实现一个JNI c文件。我在库中使用的函数会恢复 我在 JNI C 文件中实现的函数返回一个 jstring。 所以我需要把无符号的char数组转换成jstring。 但是,尽管数组应该只包含20个字节,但我在Java中随机得到22或23个字节......(虽然 20 个字节

  • 我想优化我的代码,避免错误,我有这个功能,但我认为我可以改善和避免内存问题。 该函数的思想是接收这种样式的字符串“0123456789”并将其传递给0x01、0x23、0x45、...在无符号字符数组中。任何提示,良好的实践或改进将是非常有用的。 用法是这样的: 在函数缓冲区中结束如下:

  • 在我的生产级应用程序中,我正在研究一些与unicode字符相关的问题,比如中文/日语字符串。 我的应用程序有一个启动程序和一个配置文件,它设置了运行JVM可以使用的所有参数。此配置文件作为命令行参数的一部分传递。 所以我创建了一个小程序来测试这个场景,该程序的工作是将一个文件路径作为命令行参数的一部分,打印它并读取该文件的内容。在运行之前,它看起来与上面类似,即“some/path/和/????.