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")
我如何删除除#34; api / xxx"之外的所有文字。结果必须是:
"api/method1"
"api/method2"
"api/method2"
"api/method2"
"api/method1"
"api/method1"
"api/method4"
我想使用Emacs的内置功能(无需编写自定义elisp脚本或Emacs宏)。
答案 0 :(得分:4)
选择要修改的行并运行 M-x replace-regexp
。使用.*\("api/.+?"\).*
替换正则表达式,替换使用\1
。
这个正则表达式说:
.*
- 匹配任意数量的任何字符\(...\)
- 在parens之间保存位"api/.+?"
- 文字"api/
后跟任何内容,包括下一个"
。.*
- 后跟任意数量的任何字符并将其替换为\1
,这是上面\(\)
的第一个(也是唯一一组)中的任何文字。
输出是预期的:
"api/method1"
"api/method2"
"api/method2"
"api/method2"
"api/method1"
"api/method1"
"api/method4"
答案 1 :(得分:0)
如果您对在单独的缓冲区中输出结果感到满意,可以使用occur
,如下所示:
C-u M-s o "api/.+?"
RET