我有以下字符串:
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[/<.*>.*<\/.*>/]
答案 0 :(得分:1)
您可以将scan
与以下正则表达式一起使用:
/<([^>]+)>(\d+)<\/\1>/
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