【问题标题】:omiting consecutive 8 digits (not numerical) from input从输入中省略连续的 8 位数字(非数字)
【发布时间】:2012-12-12 11:15:40
【问题描述】:

我有一个考虑验证的任务,如果字符串连续包含 8 个字母形式的数字,我想修剪一个字符串,例如:

“三四五五二三四一二”或“三四五五二三四一二”

我想知道这个或其他建议是否可能是一些正则表达式。

它可以是 Javascript 或 Java

输入字符串:样本字符串三四五五二三四一二剩余img字符串

输入字符串:“样本字符串三四五五二三四一二剩余img字符串”

我的预期字符串:“示例字符串保持img字符串

谢谢,吉比

【问题讨论】:

  • 您能否用所需输入和输出的示例更新您的问题?至于现在,太模糊了。此外,这应该用JS还是Java来完成?
  • a) 为什么会有 Java 和 JavaScript 标签? b) 你指的是数字词还是数字? c) 你所说的修剪是什么意思?从单词中删除那些连续的数字?完全拒绝字符串?如果多次出现 8 位数字怎么办? d) 你尝试过什么?
  • 我的尝试现在对我来说是无法访问的较短的变体

标签: java javascript regex


【解决方案1】:

这应该适用于 Javascript:

str.replace(
    /(?:(?:zero|one|two|three|four|five|six|seven|eight|nine)\s*){8,}/g,
    ""
);

【讨论】:

  • 这与threefourfivefivetwothreefouronetwo不匹配
  • 只需将{8}修改为{8,}
  • @AlexanderPavlov,谢谢,已更正。描述只提到了八位数字,我没有注意到示例显示它也应该匹配超过八位。
【解决方案2】:

如果数字的拼写方式与您的示例一样,并且您在 JavaScript 中需要它,那么试试这个:

var eightDigitsRegex = /(?:(?:zero|one|two|three|...|nine)\s*){8,}/;
if (string.match(eightDigitsRegex)) {
    // It matches.
}

确保将其余数字添加到 eightDigitsRegex 的中间。

  • (?:) 是非捕获组
  • zero|...|nine - 数字替代品
  • {8} - 重复次数(任意数字对应的非捕获组会遇到8次

编辑:这里只匹配正则表达式。请明确“修剪” 到底是什么。删除匹配的子字符串?周围有空格吗?..

【讨论】:

  • 在单独的步骤中删除空格是不可取的,因为它会破坏字符串的其余部分,甚至可能产生误报。例如:"on e two three..." 不应匹配。
  • 对,但那是在问题编辑之前没有提到任何周围的字符串。我正在等待澄清以发布完整的回复。
  • 从示例中可以清楚地看出,修剪意味着从字符串中删除匹配的部分。
  • @dan1111:不过细节还不是很清楚。如果我有FOOthree fourfive...nine BAR 会怎样?应该变成FOOBAR 还是FOO BAR
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
相关资源
最近更新 更多