1

I'm looking to replace all the underscore (_) characters between the first pair of double quotes (") with full stops (.) in this .xml

I've used this regex android:name="([A-Za-z0-9_.]+)" and got the selection android:name="com_android_contacts", but how do I change the _ into . within this selection?

<package-redirections android:name="com_android_contacts" android:resource="@xml/com_android_contacts" android:minSdkVersion="16" />

to

<package-redirections android:name="com.android.contacts" android:resource="@xml/com_android_contacts" android:minSdkVersion="16" />

Thank you.

4

3 回答 3

2

您可以使用正则表达式:

(?:android:name="[^"_]*)\K_([^"_]*)

.$1根据需要多次更换,直到没有更多的更换。

确保您选择了正则表达式搜索。我不确定版本差异,但这适用于 v6.1.8。

这适用于android.name属性中的任意数量的点。

\K重置比赛,这样你就不必放回去了android:name


顺便说一句:在 PCRE 风格的正则表达式中,你可以使用这个:

(?:android:name="[^"_]*|\G)\K_([^"_]*)

它在一次替换中将所有下划线替换为点。

\G上一场比赛结束时的比赛。

于 2013-10-02T10:45:55.330 回答
0

我不确定你是否可以在 notepad++ 中立即替换,但如果你说 if 只有 2 _ 那么你可以使用这个:find

(android:name="[^"\._]*)(_)([^"\._]*)(_)([^"\._]*?")

替换为:

\1\.\3\.\5
于 2013-10-02T10:46:00.337 回答
0

如果所有行都像这样(即三个元素以 _ 作为分隔符),您可以尝试搜索:

(android:name="[^_]+)_([^_]+)_([^"]+")

代替:

$1.$2.$3"

解释:

括号 () 中的值保存在名为 $1、$2 和 $3 的变量中(从左到右) [^_] = 所有不是 _ 的字符

在您的示例中 $1 = android:name="com 以下 _ 将被替换为 . 等。

于 2013-10-02T10:48:25.590 回答