gpt4 book ai didi

固定宽度字段的正则表达式

转载 作者:行者123 更新时间:2023-12-04 23:33:52 25 4
gpt4 key购买 nike

我需要使用正则表达式匹配文件布局上的固定宽度字段。该字段是数字/整数,总是有四个字符,并且包含在 0..1331 的范围内。当数字小于 1000 时,字符串用左零填充。所以所有这些例子都是有效的:

  • 0000
  • 0001
  • 0010
  • 1000
  • 第1331章

    但以下必须是 而不是 接受:
  • 1
  • 01
  • 10
  • 100
  • 第4759章

    如果我只能使用正则表达式强制执行此限制,那就太好了。玩了一会儿,我得到了表达式 \0*[0-1331]\ 。问题是它没有将大小限制为四个字符。当然我可以做 \000[0-9]|00[10-99]|0[100-999]|[1000-1331]\ 但我拒绝使用如此讨厌的东西。谁能想到更好的方法?

    最佳答案

    正则表达式不是每个问题的答案。我的建议是做这样的事情:

    boolean isValidSomethingOrOther (string):
    if string.length() != 4:
    return false
    for each character in string:
    if not character.isNumeric():
    return false
    if string.toInt() > 1331:
    return false
    return true

    如果您必须使用正则表达式,那么您的解决方案没有任何问题,但我可能会使用以下变体(仅基于我对 RE 引擎及其工作方式的理解):
    ^0[0-9]{3}|1[0-2][0-9]{2}|13[0-2][0-9]|133[01]$
  • 第一部分匹配 0000-0999。
  • 第二个匹配 1000-1299。
  • 第三个匹配 1300-1329。
  • 最后一个匹配 1330 和 1331。

  • 更新:

    就优雅评论而言,有多种优雅形式,正则表达式就是其中之一。您还可以通过将验证抽象为单独的函数或宏,然后从您的代码中调用它来实现优雅:
    if isValidSomethingOrOther(str) ...

    其中 SomethingOrOther 是一个具体的业务对象。这使您可以轻松更改有效对象的想法,甚至可以根据需要使用正则表达式或您认为合适的任何其他检查(例如我上面的函数)。

    这允许您满足任何更改,例如这些对象现在必须是质数的要求。

    我确定我可以写一个“质数小于 1332”的正则表达式。我同样确定我不想 - 我更愿意将其编码为函数(或原始速度的查找表),特别是因为正则表达式很可能看起来像:
    ^2|3|5|7| ... |1327$

    反正。

    关于固定宽度字段的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1309700/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com