用正则表达式替换文件中的文本

时间:2014-03-24 13:30:59

标签: ruby regex

我尝试读取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字符串。

感谢任何帮助,如果我的方法不正确,请告诉我如何以其他方式解决问题。

1 个答案:

答案 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"')