正则表达式从给定字符串中获取值

时间:2015-07-13 07:04:44

标签: ruby regex

我有以下字符串:

a=<record><FPR_AGENT_CODE>990042833</FPR_AGENT_CODE><FPR_AGENT_LABELCODE>CIF Code :</FPR_AGENT_LABELCODE><FPR_AGENT_LABELNAME>CIF Name :</FPR_AGENT_LABELNAME>

我需要从以下地址获取价值:

<FPR_AGENT_CODE>990042833</FPR_AGENT_CODE>

"FPR_AGENT_CODE 990042833 FPR_AGENT_CODE"

如何为此编写正则表达式?我尝试使用下面给出的那个,但它没有用。

puts a[/<.*>.*<\/.*>/]

1 个答案:

答案 0 :(得分:1)

您可以将scan与以下正则表达式一起使用:

/<([^>]+)>(\d+)<\/\1>/

Sample code

a="<record><FPR_AGENT_CODE>990042833</FPR_AGENT_CODE><FPR_AGENT_LABELCODE>CIF Code :</FPR_AGENT_LABELCODE><FPR_AGENT_LABELNAME>CIF Name :</FPR_AGENT_LABELNAME><FPR_AGENT_NAME>Mr Kamal Kishore</FPR_AGENT_NAME><FPR_BANK_BRANCH_NAME>STATE BANK OF INDIA KHOUR</FPR_BANK_BRANCH_NAME><FPR_BRANCH_ADDRESS>"
puts a.scan(/<([^>]+)>(\d+)<\/\1>/)

输出:

FPR_AGENT_CODE
990042833

正则表达式<([^>]+)>(\d+)<\/\1>在尖括号中搜索字符串(将文本捕获到组1中),然后搜索一个或多个数字(\d+)的序列,然后搜索结束标记。

如果您需要获取多个值,可以使用:

puts a.scan(/<([^>]+\b)[^<>]*>(.*?)<\/\1>/)

请参阅another demo,输出:

FPR_AGENT_CODE
990042833
FPR_AGENT_LABELCODE
CIF Code :
FPR_AGENT_LABELNAME
CIF Name :
FPR_AGENT_NAME
Mr Kamal Kishore
FPR_BANK_BRANCH_NAME
STATE BANK OF INDIA KHOUR

对于多行输入,请使用m选项,或将(.*?)替换为([^<]*)

puts a.scan(/<([^>]+\b)[^<>]*>(.*?)<\/\1>/m) 

或者

puts a.scan(/<([^>]+\b)[^<>]*>([^<]*)<\/\1>/)

请参阅another demo