您的位置:首页 > 其它

正则表达式

2017-03-14 11:35 351 查看
反向引用:

例子:

表达式:

<field\s+flow\=\"(.*?)\"\s+type\=\"(.*?)"\s+/>

`\1` \2,
结果:
<field flow="4days.list_amt.YZ01028.sent" type="double" />
<field flow="4days.list_amt.Y96077.sent" type="double" />
`4days.list_amt.YZ01046.sent` double,
`4days.list_amt.Y96076.sent` double,


以groovy为例子:groovy的replaceAll方法可以使用正则表达式

package com.spiderdt.cocacola.test

/**
* Created by ranran on 2017/3/14.
*/
class testDataDeal {
public static void main(String[] args) {
// def s = '<field flow="4days.list_amt.Y96077.sent" type="double" />'
// println(s)
// def m = s =~ /flow/
// while (m.find()) {
// println(m.group())
// }

def lineList = new File("G:/SpiderData/File/jushuitantest.txt.schema")
def resultFile = new File("G:/SpiderData/File/result.sql")
def temp
def tablename
def delimeter

lineList.eachLine {
def resultName = it =~ /<analytic\s+name=\"(.*?)\">/
if (resultName) {
tablename = it.replaceAll(/<analytic\s+name=\"(.*?)\">/, '$1')
resultFile.append("""CREATE EXTERNAL TABLE $tablename(\n""")
}

def resultDelimiter = it =~ /delimiter\=\"(.*?)\"/
if (resultDelimiter) {
delimeter = it.replaceAll(/delimiter\=\"(.*?)\">/, '$1')
println(delimeter)
}

def result2 = it =~ /<field\s+flow\=\"(.*?)\"\s+type\=\"(.*?)"\s+\/>/
if (result2) {
// println it.replaceAll(/<field\s+flow\=\"(.*?)\"\s+type\=\"(.*?)"\s+\/>/, '`$1` $2,').replaceAll(/\./, '_')
temp = it.replaceAll(/<field\s+flow\=\"(.*?)\"\s+type\=\"(.*?)"\s+\/>/, '`$1` $2,').replaceAll(/\./, '_')
resultFile.append(temp + '\n')
}
}
resultFile.append(""") PARTITIONED BY (tradeDate INT) \nROW FORMAT DELIMITED FIELDS TERMINATED BY ',' \nLOCATION'/user/hive/warehouse/test.db/endTest/';
""")

// println()
// def replaced = "abc".replaceAll(/(a)(b)(c)/, '$1$3,')
// println(replaced)

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  正则表达式