+ -
当前位置:首页 → 问答吧 → 正则匹配的大问题

正则匹配的大问题

时间:2011-06-08

来源:互联网

再接刚才那个正则小问题:


现在要匹配一串长字符中的[...]中的内容,但[...]只是包含在以C1开头和RP结尾的子字符串中,并将其替换为空字符。

以C1开头和RP结尾的子字符串会出现多次。

如下:

C1 [Pillai, Vijayamohanan K.] CECRI Chennai Ctr, Taramanii 600113, India.[Kannan, Ramaiyan; Kagalwala, Husain N.; Chaudhari, Harshal D.; Kharul, Ulhas K.; Kurungot, Sreekumar] Natl Chem Lab, Div Phys Chem, Pune 411008, Maharashtra, India. RP 863 Program [2009AA0-SZ423]; National Science Foundation of China PBI membrane (530 mW cm(-2)).C1 [Suryani; Chang, Chia-Ming; Liu, Ying-Ling] Chung Yuan Christian Univ, Dept Chem Engn, Tao Yuan 32023, Taiwan.[Suryani; Chang, Chia-Ming; Liu, Ying-Ling] Chung Yuan Christian Univ, R&D Ctr Membrane Technol, Tao Yuan 32023, Taiwan.[Lee, Young Moo] Hanyang Univ, WCU Dept Energy Engn, Coll Engn, Seoul 133791, South Korea. RP

转变成:
C1 CECRI Chennai Ctr, Taramanii 600113, India. Natl Chem Lab, Div Phys Chem, Pune 411008, Maharashtra, India. RP 863 Program [2009AA0-SZ423]; National Science Foundation of China PBI membrane (530 mW cm(-2)).C1 Chung Yuan Christian Univ, Dept Chem Engn, Tao Yuan 32023, Taiwan. Chung Yuan Christian Univ, R&D Ctr Membrane Technol, Tao Yuan 32023, Taiwan. Hanyang Univ, WCU Dept Energy Engn, Coll Engn, Seoul 133791, South Korea. RP

这是本人初步写的,效果不理想,在C1和RP间只匹配了一个[...]中的内容。

VBScript code

<%
Dim txtStr,oStr
oStr = "C1 [Pillai, Vijayamohanan K.] CECRI Chennai Ctr, Taramanii 600113, India.[Kannan, Ramaiyan; Kagalwala, Husain N.; Chaudhari, Harshal D.; Kharul, Ulhas K.; Kurungot, Sreekumar] Natl Chem Lab, Div Phys Chem, Pune 411008, Maharashtra, India. RP"

txtStr = filterStr(oStr)
Response.Write "transform str:<br />"& oStr & "<br />"
Response.Write "transformed str:<br /><font color=red>"& txtStr &"</font>"
Response.End

Function filterStr(txt)
    Set re = New regExp
    re.pattern = "(^C1\s)(?:\[.*?\])+(.*?)(\sRP$)"

    re.global = True
    re.IgnoreCase = True
    re.MultiLine = True
    filterStr = re.Replace(txt,"$1$2$3")
End Function
%>




还请大家不吝赐教。

作者: whlib   发布时间: 2011-06-08

顶一下

作者: whlib   发布时间: 2011-06-08

ASP不熟悉,你试下看看吧:
VBScript code


Function filterStr(txt)
    Set re = New regExp
    re.pattern = "(C1\s+)(([^\[]*?)\[.*?\]([^\]]*?))+(.*?\s+RP)"

    re.global = True
    re.IgnoreCase = True
    re.MultiLine = True
    filterStr = re.Replace(txt,"$1$3$4$5")
End Function

作者: fengyun817   发布时间: 2011-06-08

引用 2 楼 fengyun817 的回复:
ASP不熟悉,你试下看看吧:

VBScript code


Function filterStr(txt)
Set re = New regExp
re.pattern = "(C1\s+)(([^\[]*?)\[.*?\]([^\]]*?))+(.*?\s+RP)"

re.global = True
re.IgnoreCase = Tru……



还是有点问题,只匹配了第二个C1的第二个[]后的字符串。

匹配结果如下:
C1 Chung Yuan Christian Univ, R&D Ctr Membrane Technol, Tao Yuan 32023, Taiwan. Hanyang Univ, WCU Dept Energy Engn, Coll Engn, Seoul 133791, South Korea. RP

作者: whlib   发布时间: 2011-06-08

VBScript code

<%
Dim txtStr,oStr
oStr = "C1 [Pillai, Vijayamohanan K.] CECRI Chennai Ctr, Taramanii 600113, India.[Kannan, Ramaiyan; Kagalwala, Husain N.; Chaudhari, Harshal D.; Kharul, Ulhas K.; Kurungot, Sreekumar] Natl Chem Lab, Div Phys Chem, Pune 411008, Maharashtra, India. RP 863 Program [2009AA0-SZ423]; National Science Foundation of China PBI membrane (530 mW cm(-2)).C1 [Suryani; Chang, Chia-Ming; Liu, Ying-Ling] Chung Yuan Christian Univ, Dept Chem Engn, Tao Yuan 32023, Taiwan.[Suryani; Chang, Chia-Ming; Liu, Ying-Ling] Chung Yuan Christian Univ, R&D Ctr Membrane Technol, Tao Yuan 32023, Taiwan.[Lee, Young Moo] Hanyang Univ, WCU Dept Energy Engn, Coll Engn, Seoul 133791, South Korea. RP"

txtStr = filterStr(oStr)
Response.Write "transform str:<br />"& oStr & "<br />"
Response.Write "transformed str:<br /><font color=red>"& txtStr &"</font>"
Response.End

Function filterStr(ByVal txt)
    Set re = New regExp
    re.pattern = "C1\s([\s\S]+?)\sRP"
    re.global = True
    re.IgnoreCase = False
    re.MultiLine = True
    Set col = re.Execute(txt)
    For Each m In col
        Set re1 = New regExp
        re1.Global = True
        re1.IgnoreCase = False
        re1.MultiLine = True
        re1.Pattern = "\[[^\]]+\]"
        t = re1.Replace(m, "")
        txt = Replace(txt, m, t)
        Set re1 = Nothing
    Next
    Set re = Nothing
    filterStr = txt
End Function
%>

作者: hookee   发布时间: 2011-06-08

VBScript code
Dim txtStr,oStr
oStr = "C1 [Pillai, Vijayamohanan K.] CECRI Chennai Ctr, Taramanii 600113, India.[Kannan, Ramaiyan; Kagalwala, Husain N.; Chaudhari, Harshal D.; Kharul, 

Ulhas K.; Kurungot, Sreekumar] Natl Chem Lab, Div Phys Chem, Pune 411008, Maharashtra, India. RP 863 Program [2009AA0-SZ423]; National Science Foundation of 

China PBI membrane (530 mW cm(-2)).C1 [Suryani; Chang, Chia-Ming; Liu, Ying-Ling] Chung Yuan Christian Univ, Dept Chem Engn, Tao Yuan 32023, Taiwan.[Suryani; 

Chang, Chia-Ming; Liu, Ying-Ling] Chung Yuan Christian Univ, R&D Ctr Membrane Technol, Tao Yuan 32023, Taiwan.[Lee, Young Moo] Hanyang Univ, WCU Dept Energy 

Engn, Coll Engn, Seoul 133791, South Korea. RP"

txtStr = filterStr(oStr)
Response.Write "transform str:<br />"& oStr & "<br />"
Response.Write "transformed str:<br /><font color=red>"& txtStr &"</font>"
Response.End

Function filterStr(txt)
    Set re = New regExp
    re.pattern = "\[.[^\]]+\](?![^\[\]]+C1)"

    re.global = True
    re.IgnoreCase = True
    re.MultiLine = True
    filterStr = re.Replace(txt,"")
End Function

这样看看合不合你的要求?

作者: aspwebchh   发布时间: 2011-06-08

热门下载

更多