如何在同一个正则表达式中使用捕获的组

时间:2016-01-24 06:54:14

标签: regex android-studio intellij-idea

mFoo = foo;
mBar = bar;
// convert to
this.foo = foo;
this.bar = bar;

如何使用正则表达式来处理这种替换?请帮忙。以下是我在Android Studio(IntelliJ IDEA)Edit -> Find -> Replace in Path

中使用的方法
Text to find: m([A-Z])([A-Za-z0-9]+) = L$1$2
Replace with: this\.L$1$2 = L$1$2

更新

上面的

L是一个错字。根据{{​​3}}

,它应为\L

3 个答案:

答案 0 :(得分:14)

您可以使用带有反向引用的模式,并将“=”之后的最后几个字分组:

Text to find: m([A-Z])([A-Za-z0-9]+) = (L\1\2)
Replace with: this\.L$1$2 = $3

在您发表评论后,我了解到您还遇到了小写/大写字符问题。所以尝试这种模式(我也简化了正则表达式):

m(\p{Alpha})(\w+) = (((?i)\1)\2)

并替换字符串:

this\.L$1$2 = $3

所以使用带有输入文本的示例:

mContext = context

你得到了这个:

this.LContext = context

我不知道你的text / replace字符串中指定的“L”是你的拼写错误还是其他错误,但如果是这样你可以通过以下方式更改“替换字符串”:

this\.$3 = $3

所以你可以得到这个:

this.context = context

请告诉我这是否对您有帮助!

答案 1 :(得分:0)

假设您有一个带有语句列表的文本文件:

This is text one$
This is text two!
Is this text three?

您想转义所有元字符。 1.在Android Studio中,通过按Ctrl + R打开“查找和替换”功能 2.在“查找”字段中输入: ([[\\ ^ \ $。\ | \?* +(){}]) 3.选中“正则表达式”复选框 4.在“替换”字段中输入: \ $ 1

现在结果应如下所示:

This is text one\$
This is text two\!
Is this text three\?

答案 2 :(得分:0)

感谢Simona R.,这是Android Studio中的一个简单示例。

我要替换

parentFragmentManager.let { dialogFragment.show(it, AlertDialogFragment.TAG) } 

dialogFragment.show(parentFragmentManager, AlertDialogFragment.TAG) 

分为几类,以便可以更改两个参数。

然后我用$1$2替换:

parentFragmentManager.let \{ (\w+).show\(it, (\w+).TAG\) \}
$1.show\(parentFragmentManager, $2.TAG\)

enter image description here