【问题标题】:Emacs how remove all text except "some_text"?Emacs 如何删除除“some_text”之外的所有文本?
【发布时间】:2017-05-25 15:33:11
【问题描述】:

Windows 10(64 位)、Emacs 25.1。

假设我有文本:

    MyActivity.java:124:       RestClient().getAuth("api/method1" + Integer.toString(id) + ".json")
MyActivity2.java:224    RestClient().getAuth("api/method2" + Integer.toString(id) + ".json")
MyActivity2.java:224:      RestClient().getAuth("api/method2" + Integer.toString(id) + ".json")
MyFragment.java:684:    RestClient().getAuth("api/method2" + Integer.toString(id) + ".json")
MyActivity2.java:224:        RestClient().getAuth("api/method1" + Float.toString(id) + ".xml")
Fragment.java:234:    RestClient().getAuth("api/method1" + Integer.toString(id) + ".json")
MyActivity2.java:224:        RestClient().getAuth("api/method4" + Float.toString(id) + ".xml")

如何删除除“api/xxx”之外的所有文本。所以结果必须是:

"api/method1" "api/method2" "api/method2" "api/method2" "api/method1" "api/method1" "api/method4"

我想使用 Emacs 的内置功能(无需编写自定义 elisp 脚本或 Emacs 宏)。

【问题讨论】:

    标签: replace emacs


    【解决方案1】:

    选择要修改的行并运行 M-xreplace-regexp。使用.*\("api/.+?"\).* 替换正则表达式,替换使用\1

    这个正则表达式说:

    • .* - 匹配任意数量的任意字符
    • \(...\) - 保存括号之间的位
    • "api/.+?" - 文字 "api/ 后跟任何内容,包括下一个 "
    • .* - 后跟任意数量的任意字符

    并将其替换为\1,即上面第一组(也是唯一的)\(\) 中的任何文本。

    输出是预期的:

    "api/method1"
    "api/method2"
    "api/method2"
    "api/method2"
    "api/method1"
    "api/method1"
    "api/method4"
    

    【讨论】:

      【解决方案2】:

      如果您对在单独的缓冲区中输出结果感到满意,您可以像这样使用occur

      C-uM-so "api/.+?" RET

      【讨论】:

        猜你喜欢
        • 2019-08-01
        • 2015-03-06
        • 2010-11-26
        • 1970-01-01
        • 2011-09-15
        • 2013-02-08
        • 2018-01-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多