我需要帮助为这个问题创建最好的正则表达式。
我有开始和结束量程的组合/集合,我需要让所有的,子字符串/开始数据之间的任何单词,直到结束。
假设这张表是“烈度表”:
START END
猫狗
苹果橙
狮子斑马
熊猫猫
样本输入:
substring1 CAT substring2 substring3 DOG substring4 substring5 CAT substring6
APPLE substring7 substring 8 ORANGE ORANGE substring9 DOG substring10 PANDA
substring11 CAT substring12 DOG substring13 LION substring10 substring11 ZEBRA substring12
CAT substring13 substring14 APPLE substring15 substring 16 ORANGE产出必须是:
H 114Applesubstring15 substring16橙H 215G 216
我的正则表达式:
CAT (.)*? DOG | APPLE (.)*? ORANGE | LION (.)*? ZEBRE | PANDA (.)*? CAT 我有问题,处理字符串,有多次发生的其他启动速度。
举个例子:
CAT word1 word2 word3 word4 APPLE word5 word6 word7 DOG 我知道它将与这只猫(.)*匹配?,但是这是错误的,因为子字符串包含一个起始参数。
我只需要一个正则表达式,这将得到所有的词之间的起始语料表,直到它的匹配的结束,如果任何时候,子字符串不包含任何出现的其他起止器。
有什么建议吗?谢谢
发布于 2012-05-18 11:46:36
在这里帮助我们的技术称为“查找”。
在澄清了nfinium和jsobo的反馈后,我更新了我的回答。
CAT ((?!(APPLE|LION|PANA)).)*? DOG|APPLE ((?!(CAT|LION|PANDA)).)*? ORANGE|LION ((?!(CAT|APPLE|PANDA)).)*? ZEBRA|PANDA ((?!(APPLE|LION)).)*? CAT鉴于投入:
substring1 CAT substring2 substring3 DOG substring4 substring5 CAT substring6 APPLE substring7 substring 8 ORANGE ORANGE substring9 DOG substring10 PANDA substring11 CAT substring12 DOG substring13 LION substring10 substring11 ZEBRA substring12 CAT substring13 substring14 APPLE substring15 substring 16 ORANGE string CAT dkdkdkdkdk CAT dkdkdk dkdkdk ORANGE dkdkdkdk DOG etc. CAT word1 word2 word3 word4 APPLE word5 word6 word7 DOG wordx相配
CAT substring2 substring3 DOG
APPLE substring7 substring 8 ORANGE
PANDA substring11 CAT
LION substring10 substring11 ZEBRA
APPLE substring15 substring 16 ORANGE
CAT dkdkdkdkdk CAT dkdkdk dkdkdk ORANGE dkdkdkdk DOG特别是,它将与nfinium所指示的以下内容不匹配
CAT word1 word2 word3 word4 APPLE word5 word6 word7 DOG 也和你指出的匹配
CAT dkdkdkdkdk CAT dkdkdk dkdkdk ORANGE dkdkdkdk DOG 您说它应该与以下内容相匹配
CAT substring12 DOG但我不认为它不应该,因为猫从上面是结束分隔符
PANDA substring11 CAT这个正则表达式产生了nfinium的预期结果。
注意,根据nfinium CAT的要求,CAT可以是起始分隔符和结束分隔符。
CAT | DOG
PANDA | CAT发布于 2012-05-18 11:45:29
我认为这其中的关键是第二和产出:
"APPLE substrin7 substring8 ORANGE" 它载于:
"CAT substring6 APPLE substring7 substring 8 ORANGE ORANGE substring9 DOG"因此,最基本的是,你必须抓住猫,而不是紧随其后的苹果,橙色,狮子,狮子,斑马,熊猫,猫,因为这些会启动另一组。这是可能的,但是编写正则表达式就像尝试用regex解析HTML一样。
请参阅:RegEx match open tags except XHTML self-contained tags
这是可以完成的,但是regex将会非常复杂,这个问题最好在代码中处理。
这里是一个我认为你想要处理前两个开始结束组合的例子。
(CAT(?!.+(?:APPLE|ORANGE|LION|ZEBRA|PANDA|CAT).+DOG).*?DOG)|(APPLE(?!.+(?:APPLE|LION|ZEBRA|PANDA|CAT|DOG).+ORANGE).*?ORANGE)第一组是..。
(CAT(?!.+(?:APPLE|ORANGE|LION|ZEBRA|PANDA|CAT).+DOG).*?DOG)所以你可以看到,如果这有更多的组合,它只是变得非常冗长。
https://stackoverflow.com/questions/10651621
复制相似问题