【发布时间】:2012-10-07 03:24:46
【问题描述】:
我刚刚问了这个问题similar question,得到了一个非常准确的答案,但事实证明我现在遇到了一个全新的问题。原来我有一个相关输入的单行。我不知道如何以抽象的方式提出这个问题,所以我将直接进入我的输入:
(已编辑以提供更好的示例)
bear999bear888bear777bear666fox---bear222bear333bear444bear555fox
(标记之间的项目不一定是数字)
这是表达式(EDITED 以匹配更新的输入示例):
bear.*bear(?<matchString>(.(?!bear.*bear))*?)bear.*fox
它返回 444。有没有办法可以调整它以返回 444 和 777?它似乎跳过了第一场比赛,只支持后者。我有 ! 排除项,因此它只匹配左侧最里面的部分。
我一直在这里测试: http://regexlib.com/RETester.aspx
当我将它分成两行并打开多行时,这非常有用。为什么输入在一行时会停止工作?
任何建议将不胜感激!
【问题讨论】:
-
我们可以说
xxx[^xy]+yyy是这里的结束分隔符吗?看,在这个特定的例子中,/([^x]+?)(?=xxx[^xy]+yyy)/g模式就足够了...... -
@raina77ow - 谢谢。我不确定我是否完全遵循,但分隔符实际上是一个组,而不是特定字符(在另一个示例中,它可能是“ABC”)。我有点喜欢正则表达式,所以我不太确定如何将这些信息转化为您的想法。
-
无论您对正则表达式有多少经验(或没有)都没有关系。 ) 关键点始终是定义两组数据:一组应该匹配(或被捕获),另一组不应该匹配。说了这么多,能不能展示一下我展示的正则表达式不能正确处理的字符串?
-
@raina77ow - 例如,xxx999xxx888xxx777x000xxx666yyy---xxx222xxx333xxx444xxx555yyy,应该返回 777x000 和 444。感谢您的帮助。
-
@raina77ow - 我刚刚更新了问题,改用“熊”和“狐狸”。我在示例中使用相同的重复字符引入了一些混淆(我试图保持它的可读性但让它变得更糟)。
标签: c# .net regex regex-greedy non-greedy