【问题标题】:Match within string if string part is 31 characters or longer如果字符串部分为 31 个字符或更长,则在字符串内匹配
【发布时间】:2018-11-26 15:43:53
【问题描述】:

我有一长串格式如下的字符串:

  • “一个字符串较小的字符串大于 32 个字符以匹配”
  • “沿着大于 32 个字符的字符串匹配更小的字符串”
  • "astring string alongstringthatisgreaterthan32 598931"

使用正则表达式,我将如何使用空格分隔符匹配该字符串大于 31 个字符的字符串?

例如,下面的字符串将被“视为”为两部分,计数将是 14 和 47,因此是有效匹配。

  • “一个字符串较小的字符串大于 32 个字符以匹配”

很遗憾,分隔符/空格的数量在位置或数量上不一致。我还有一堆其他特殊字符被视为“分隔符”

("!")
("@")
('"')
("#")
("$")
("&")
("'")
("(")
(")")
("*")
("+")
(",")
(".")
("/")
(":")
(";")
("<")
("=")
(">")
("?")
("^")
("`")
("{")
("|")
("}")
("~")
(" ")
("  ")
("“")
("”")
("’")
("%")

提前致谢!

【问题讨论】:

标签: regex


【解决方案1】:

在这种情况下,您要做的是匹配 31+ 个不是分隔符的字符:

[^!@"#$&'()*+,./:;<=>?^`{|}~ “”’%]{31,}

Demo


另外,除了使用分隔符“黑名单”之外,您也许还可以只匹配有效单词? (但这取决于您的具体用例)

\w{31,}

\w[a-zA-Z0-9_] 相同)

Demo

【讨论】:

  • 花括号不是常规的 ASCII,因此您可能需要单独告诉引擎它们是 Unicode(或一些旧的 8 位编码,如果您坚持使用的话)。可惜 OP 不会透露他们使用的平台或语言。
【解决方案2】:

据我了解,如果行包含大于 31 个字符(不包含分隔符)的字符串,您希望验证行。我建议使用这样的前瞻:

^(?=.*[^!@"#$&'))*+,.\/:;<=>?^`{|}~ “”’%\r\n]{31,}).+$

Demo

然后,您可以根据需要进一步处理这些行。

【讨论】:

    猜你喜欢
    • 2021-07-11
    • 1970-01-01
    • 2011-12-14
    • 2019-05-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多