perl中每行有多个要匹配的字符串怎么取?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perl中每行有多个要匹配的字符串怎么取?相关的知识,希望对你有一定的参考价值。
例如:“1232352》和罚款6899》浓咖啡7899》还记得”
想建一个hash,key是汉字,value为汉字前的数字,不过每行数字和对应汉字的组数不定,说不定下一行就只有:“689077》或更换i欧冠”一组
其实你的需求写的很不明确。我不知道你是只需要抓取汉字+数字的 这种呢,还是只有汉字/数字的也需要抓取,如果只有汉字/数字 的,又怎么存放在一个哈希里。如果只匹配汉字+数字 就是(\w+)(\d+) 然后
把$1,$2,存到一个哈希里就行 参考技术A /模式匹配/g
这个小骆驼书上有的
正则表达式匹配多个字符串但不匹配特定字符串
【中文标题】正则表达式匹配多个字符串但不匹配特定字符串【英文标题】:Regex to match several strings but not specific ones 【发布时间】:2014-10-08 14:32:01 【问题描述】:我正在使用 Perl 来搜索和匹配每行中符合条件的字符串,并希望省略包含特定字符串的行。 我的意思是: 假设我正在匹配字符串 Mouse,但如果该行匹配 X123Y,我想省略。任何一个字符串都可以在该行的任何位置找到。
*** Mouse forum. <--Match
*** -Mouse- forum. <--Match
*** X123Y forum Mouse. <--Should not Match
*** XYZ forum Mouse. <--Should not Match
我希望这能解决它,因为我使用的是负前瞻,但似乎没有奏效。
(?i)(\WMouse\W|(?!(X123Y|XYZ)).*$)
我想我在做一些根本错误的事情,但现在看不到。
有什么帮助吗?
【问题讨论】:
【参考方案1】:这个正则表达式应该适合你:
^(?=.*?Mouse)(?:(?!(?:X123|XYZ)).)*$
RegEx Demo
【讨论】:
只需查看演示链接中的正则表达式描述,了解有关此正则表达式的所有详细信息。之后,请随时提出任何问题,我会在这里回答。【参考方案2】:您可以使用丢弃技术来保留您想要的内容并丢弃您不想要的模式。
例如,使用这个正则表达式:
.*X123Y.*|.*XYZ.*|(.*Mouse.*)
您将获取最正确模式的内容并丢弃其他模式..
Working demo
这个想法是使用:
discard patt 1 | discard patt 2 | discard patt n | (grab this pattern)
【讨论】:
以上是关于perl中每行有多个要匹配的字符串怎么取?的主要内容,如果未能解决你的问题,请参考以下文章