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

有没有一种方法可以将一行格式转换为多行格式并继续?

厉熠彤
2023-03-14

在Python中,我有一个像下面这样的长线:

patterns = re.compile(r'(^/afs|^/pkg|^/bin|^/dev|^/etc|^/usr|^/usr2|^/sys|^/sbin|^/proc)')

然后我试着把它改成下面的格式。然而,它不再像预期的那样工作了:

patterns = re.compile(r'(^/afs|\
                         ^/pkg|\
                         ^/bin|\
                         ^/dev|\
                         ^/etc|\
                         ^/usr|\
                         ^/usr2|\
                         ^/sys|\
                         ^/sbin|\
                         ^/proc)')

我知道Python使用缩进的语法,所以可能这种格式不会工作也许?或者如果有的话,有正确的方法在Python中格式化它吗?

共有3个答案

幸弘扬
2023-03-14

Python正则表达式有一个详细模式,允许您使用带注释的多行三引号。还要注意的是,re.match(与re.search相反)意味着一个^,而/不需要重复。

您可以添加一个前导(?x)到模式或使用标志re.VERBOSE或其别名re.X打开详细模式:

import re

patterns = re.compile(r'''(?x)/(usr2|     # comments also supported
                               sbin|
                               proc|
                               afs|
                               pkg|       # better to put longer matches first
                               bin|
                               dev|
                               etc|
                               usr|       # if before /usr2, would match this first
                               sys)''')

for trial in ('/afs/blah','/usr2/blah'):
    print(patterns.match(trial))

输出:

<re.Match object; span=(0, 4), match='/afs'>
<re.Match object; span=(0, 5), match='/usr2'>

还请注意,在详细模式下,空格和注释将被忽略,因此,如果有重要的空格,请将其与\s或其他转义代码显式匹配。

索和璧
2023-03-14

这很简单:

patterns = re.compile(r'(^/afs|'
                      r'^/pkg|'
                      r'^/bin|'
                      r'^/dev|'
                      r'^/etc|'
                      r'^/usr|'
                      r'^/usr2|'
                      r'^/sys|'
                      r'^/sbin|'
                      r'^/proc)')

我建议使用一个体面的Python编辑器或IDE,因为它们通常会自动为您完成这一任务。我碰巧使用了PyCharm,但我相信VSCode或其他流行的IDE和代码编辑器也可以在这方面做得很好。

洪宇定
2023-03-14

如果您想将所有内容保存在一组引用中,可以使用docstring,这样就不需要换行符或多个r'^…'符号,即。

patterns = re.compile(r"""
                         ...
                        """)

如以下文章所述:如何使用长正则表达式进行行延续?

我通常觉得这种方法更具可读性。

 类似资料:
  • 本文向大家介绍powershell 将文本转换成表格的另一种可行方式,包括了powershell 将文本转换成表格的另一种可行方式的使用技巧和注意事项,需要的朋友参考一下

  • 问题内容: 有没有一种简单的方法可以将一种日期格式转换为PHP中的另一种日期格式? 我有这个: 但是我当然希望它返回一个当前日期,而不是返回“黎明”。我究竟做错了什么? 问题答案: 第二个参数必须是正确的时间戳(自1970年1月1日以来的秒数)。您正在传递一个字符串,date()无法识别。 您可以使用 strtotime() 将日期字符串转换为时间戳。但是,即使strtotime()也无法识别格式

  • 问题内容: 我知道Internet Explorer具有自动换行样式,但是我想知道是否有跨浏览器的方法可以对div中的文本进行这种操作。 最好是CSS,但JavaScript代码片段也可以正常工作。 编辑:是的,指的是长长的弦,为人们加油! 问题答案: 阅读原始评论时,卢瑟福正在寻找一种 跨浏览器的 方式来包装 不间断的 文本(根据他对IE的自动换行设计,旨在破坏不间断的字符串)。 我现在已经使用

  • 问题内容: 如果输入大小太小,则库会自动序列化 流中地图的执行,但是这种自动化不会并且也不会考虑地图操作的繁重程度。有没有办法 强制parallelStream()实际并行化CPU重映射? 问题答案: 似乎存在根本的误解。链接的“问答”讨论了由于OP没有 看到预期的加速,流显然不能并行工作。结论是,有没有好处在 并行处理工作负载是否太小,不,有一个自动回退到顺序执行。 实际上是相反的。如果您请求并

  • 问题内容: 我需要可视化2D numpy数组。我为此使用pyplot。这是代码: 我得到预期的输出。 现在我的问题是,有什么方法可以将上述代码中的“ img”从pyplot类型转换为numpy类型。我需要这样做,以便可以将可视化文件加载为opencv图像并对其进行进一步处理。我正在使用python 2.7,32位。 请帮助 谢谢 编辑1:在Thorsten Kranz解决方案之后 程序终止后,我从

  • 问题内容: 客户要求将Oracle DB SQL中的1行拆分为6行。 假设,最初的SQL(具有多个联接的复杂sql等)进入9列: 从X,Y,Z中选择A,B,C,D,E,F,G,H,I。。。(但查询非常复杂) 1)A,B,C,D,E,F,G,H,I 现在,客户要求返回返回到上述模式的每一行,新的输出应如下所示: 1)A,B,C,’D’,D 2)A,B,C,’E’,E 3)A, B,C,’F’,F 4