【问题标题】:Regex - Single Char Prefix For Numbers正则表达式 - 数字的单字符前缀
【发布时间】:2018-01-04 12:15:21
【问题描述】:

我有点难以获得正则表达式。 就是这样。

有效案例

  1. F33434343

  2. 123243434333

无效案例

  1. ABC23232

  2. C2242422342

表示只有F可以是前缀,否则只能是数字。

我试过^([F]|[0-9]+)$ 这个,但它没有帮助。请提出一些想法或解决方案。提前致谢

【问题讨论】:

  • “但它没有帮助” - 以什么方式?它有什么问题?请提供一个minimal reproducible example,它显示了该尝试以及它是如何失败的。 (Wiktor 提供了答案,但请借此机会改进您的问题,并作为未来问题的学习经验。)
  • 它说的第一个有效案例也无效
  • 所以请在您的问题中说明,最好使用minimal reproducible example
  • 好的,我会改进的,谢谢

标签: java regex regex-lookarounds


【解决方案1】:

您可以在匹配 1 个或多个数字之前将 F 设为可选:

^F?[0-9]+$

regex demo

详情

  • ^ - 字符串的开头(隐含在 matches() 中)
  • F? - 一个可选的 F 字符
  • [0-9]+ - 1 位或多位数字
  • $ - 字符串锚点的结尾(隐含在 matches() 中)。

在 Java 中,如果您使用 matches(),您甚至可以省略前导 ^ 和尾随 $ 锚:

s.matches("F?[0-9]+")

【讨论】:

  • 谢谢,它的工作,我可以使用^([F][0-9]+|[0-9]+)$ 它似乎也工作,这个正则表达式的任何缺陷。但你的更短,我会更喜欢你的。
  • @subash 您是如何得出这样的模式的?它无法工作,因为在字符串结束后,您不能期望任何数字(并且您至少需要一个 [0-9]+)。
  • @subash ^([F][0-9]+|[0-9]+)$ 可以很好地使用,但^F?[0-9]+$ 会产生相同的结果,由于没有交替运算符,因此更具可读性和效率。
猜你喜欢
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 2014-03-05
  • 2021-03-18
  • 1970-01-01
  • 2020-09-08
相关资源
最近更新 更多