【问题标题】:How in Elisp regexp match text after a newline?Elisp regexp 如何在换行符后匹配文本?
【发布时间】:2020-10-01 19:01:37
【问题描述】:

我有一个类似的字符串

str="?tag0
1,2,3
4,5,6
?/tag0"

我想用 ?/tag1?/tag2?/tag0 替换 \n?/tag0 喜欢

str="?tag0
1,2,3
4,5,6?/tag1?/tag2?/tag0"

喜欢

(setq s (replace-regexp-in-string "[ \n\t\r]*\?/tag0" "?/tag1?/tag2?/tag0" str))

【问题讨论】:

    标签: regex newline elisp


    【解决方案1】:
    (setq s (replace-regexp-in-string "[ \n\t\r?/]*tag0" "?/tag1?/tag2?/tag0" str))
    

    【讨论】:

    • 这会替换开头的?tag0,这不在预期的结果中。
    • edit您的回答解释此代码的作用以及它如何回答问题,以便对其他有类似问题的用户有用。 Stack Overflow 上不鼓励仅使用代码的答案,因为它们没有解释它是如何解决问题的。
    【解决方案2】:

    * 表示前面的模式的零个或多个。所以这将在开头匹配,因为?tag0 之前有零个换行符。

    改用+ 来匹配一个或多个模式。

    要在正则表达式中添加文字 \?,您需要转义反斜杠。

    (setq s (replace-regexp-in-string "[ \n\t\r]+\\?/tag0" "?/tag1?/tag2?/tag0" str))
    

    【讨论】:

    • 我不知道原因,但这与字符串不匹配。我只使用 "[\n].\?/tag0" 但我不能多于一个。
    • 您需要对\? 中的反斜杠进行转义。我已经更新了答案并进行了测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多