我尝试读取XML文件,并在使用textSize属性的文本中将dp
替换为sp
。例如,如果将处理以下文件,则android:textSize="8dp"
将替换为android:textSize="8sp"
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="8dp"/>
<View
android:layout_width="wrap_content"
android:layout_height="5dp" />
</LinearLayout>
我有以下代码:
patternDp = /android:textSize=\"[\d]+dp\"/
content = File.read("layout/some_layout.xml")
content.gsub!(patternDp, "???")
我知道gsub!
方法的第二个参数是将替换模式的字符串,我在如何使用它的方式上遇到一些困难,方法不能替换整个android:textSize="8dp"
方法。 1}} sp
,但只包含模式中的dp
字符串。
感谢任何帮助,如果我的方法不正确,请告诉我如何以其他方式解决问题。
答案 0 :(得分:1)
捕获数字(\d+
)并使用\\1
替换以获取捕获。
input = input.gsub(/(?<=android:textSize=")(\d+)dp"/, '\\1sp"')
(?<=android:textSize=")
检查数字是否在android:textSize="
文本之后,以便它不会选择其他数字。
但是,如果你不想使用lookbehind (?<=...)
那么这个简单的那个。
input = input.gsub(/android:textSize="(\d+)dp"/, 'android:textSize="\\1sp"')