【问题标题】:how to join strings in python in order to get a multiline text so \n represents a new line and not a character?如何在 python 中加入字符串以获得多行文本,以便 \n 表示新行而不是字符?
【发布时间】:2019-08-01 13:20:38
【问题描述】:

给定一个字符串列表:['string_a', 'string_b', 'string_c']

如果我用\n 加入这些字符串:

'\n'.join(['string_a', 'string_b', 'string_c'])

结果是(案例0):'string_a\nstring_b\nstring_c'

如果我打印结果(案例 1):

string_a
string_b
string_c

鉴于我想使用正则表达式找到包含 string_b 的行及其下方的所有内容,但这就是我找到的:https://regex101.com/r/yF4u2I/1

正则表达式r'string_b\n.+'可以在case 1中找到文本,但在case 0中找不到。

但是,如果我将正则表达式更改为 r'string_b\\n.+',它只会在 case 0 中找到文本。发生这种情况是因为 \n 被视为字符而不是换行符。

如何加入字符串列表以获得多行字符串?或者使用正则表达式找到它的另一种方法是什么?

【问题讨论】:

  • 您尝试打印了吗? print('\n'.join(['string_a', 'string_b', 'string_c']))
  • “这是因为 \n 被认为是一个字符而不是换行符。”...\n 一个字符,通常呈现为换行符。相反,检查正则表达式中的行首和行尾标记,这些可能会有所帮助
  • 您可以在此处使用替代方案:string_b(?:\n|\\n).+see forked regex101
  • 您想要哪种方式?您的问题和 cmets 不清楚。提供 1)真正的文字字符串或 - 更好的 - 您想要使用的字符串文字,2)解释您需要在该字符串中匹配的内容
  • 太好了,现在很清楚了。使用r'STRING:((?:(?:\n|\\n)+\d+[-.](?:(?!\\n).)*)+)'demodemo

标签: python regex string newline


【解决方案1】:

您可以使用“|”或者这样:

r'string_b\n.+|string_b.+'

希望这会有所帮助!

【讨论】:

  • 我宁愿找到一种方法让两种情况都只使用一个正则表达式。我大大简化了正则表达式来创建问题,我认为每个模式都有一个模式会使它变得更加复杂。
【解决方案2】:

不要对正则表达式字符串使用 r 前缀。 r 告诉正则表达式将模式视为原始字符串。

使用'string_b\n.+'

除非存在“r”或“R”前缀,否则字符串中的转义序列 根据与标准使用的规则类似的规则进行解释 C. 识别的转义序列是:

转义序列含义注释\newline Ignored \ Backslash () \' 单引号 (') \" 双引号 (") \a
ASCII 贝尔 (BEL) \b ASCII 退格 (BS) \f ASCII 换页符 (FF) \n ASCII 换行符 (LF) \N{name} 命名字符 Unicode 数据库中的名称(仅限 Unicode)\r ASCII 回车 返回 (CR) \t ASCII 水平制表符 (TAB) \uxxxx 字符 具有 16 位十六进制值 xxxx(仅限 Unicode)\Uxxxxxxxx 字符 具有 32 位十六进制值 xxxxxxxx(仅限 Unicode)\v ASCII 垂直 制表符 (VT) \ooo 八进制字符 ooo \xhh 字符 十六进制值hh

【讨论】:

  • 还是不行。我认为问题出在目标字符串而不是正则表达式中。
【解决方案3】:
l=['a','s','c']

''.join(list(i+'\n' for i in l )))

效果很好

【讨论】:

    猜你喜欢
    • 2022-11-13
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 2014-08-03
    相关资源
    最近更新 更多