【问题标题】:REGEX - How To Match Two String WIthin x Chars of Each Other正则表达式 - 如何在彼此的 x 字符内匹配两个字符串
【发布时间】:2012-01-27 15:50:11
【问题描述】:

我正在使用使用正则表达式搜索文本文件的软件。匹配正则表达式的文件随后可供检查。

我需要搜索两个字符串必须存在的情况,第二个字符串必须出现在第一个字符串之后,但在第一个字符串之后不超过 x 个字符。在这种情况下,第二个字符串的最后一个字符始终是撇号。

例如,查找字符串一“ABC”和字符串二“XY'”,其中字符串二必须在字符串一结束后不超过 5 个位置开始:

"ABCxxxxXY" // match

"ABCxxxxxxxxxXY" // not a match.

另一种可能更好的方法是将匹配定义为包含字符串一,然后在下一个撇号之前立即包含“XY”。

"ABCxxxxxxxxXY" // match.

"ABCxxxxxxxxx'xxxxxXY" // not a match.

谢谢

迈克·托马斯

【问题讨论】:

  • 您找到相关答案了吗?您的示例似乎相互矛盾,因此可能会引起混淆。
  • where string two must begin no more than 5 spaces after the end of string one。您是说 places 而不是 spaces 吗?
  • 我看到您已经提交了对 Shiplu 答案的建议编辑。它应该应用于问题。
  • @KeithThompson - 我已经编辑了提示以反映建议的更改。
  • @user772047 - 如果这些答案中的任何一个满足问题,请选择一个作为正确答案,以便可以关闭此问题。

标签: regex


【解决方案1】:

查找字符串一“ABC”和字符串二“XY'”,其中字符串二必须在字符串一结尾后不超过 5 个空格处开始

这样就可以了。

 /ABC.{1,5}XY/

另一种可能更好的方法是将匹配定义为包含字符串 one,然后在下一个撇号之前立即包含“XY”。

你需要这个,

 /ABC[^']*'.*(?=XY)XY/

【讨论】:

  • 我认为他意思是 地方
  • 是的。我认为这就是 OP 的意思。
  • Shiplu,第一个,/ABC。{1,5}XY/ 完全正确。我必须玩第二个。非常感谢。
【解决方案2】:

您可以尝试在两者之间指定确切的匹配数。

^ABC.{0,5}XY$

这表示“匹配任何以 ABC 开头并且具有 0-5 次重复以 XY 结尾的任何类型的字符。”

【讨论】:

  • 问题是我不知道两个字符串之间可能有多少个字符。它总是至少有两个,但可能多达 30 个。MT
  • 然后您可以从 {2,30} 更改它。正则表达式将仅匹配范围中指定的字符数。如果您发布您实际在做什么而不是简化案例,您可能会更幸运地获得相关答案。
  • 另外,请注意,如果您知道字符的类型,最好使用.. 将匹配任何字符,包括换行符和符号,这可能是不可取的。替换示例是 [A-Za-z1-9],它将匹配任何字母数字字符。
  • 谢谢迈克尔 - 如果我删除前导 ^ 和尾随 $
【解决方案3】:
/ABC[^\']{0,5}XY'/

应该符合你的第二个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多