java - 使用正则表达式仅允许左对齐零
问题描述
我对使用正则表达式相当陌生。我有一个序列号,它可以采用以下形式: VV-XXXXXX-P 或 VVXXXXXXP
如果使用连字符变体,那么“X”的数字可以是可变的。例如 01-162-8 等价于 010001628。
为了识别这两种格式,我创建了以下正则表达式:
String HYPHENS = ([0]{1}[13]{1}-[1-9]{1,6}-[0-9]{1})
String NO_HYPHENS = ([0]{1}[13]{1}[0-9]{6}[0-9]{1})
然而,NO_HYPHENS 变体的问题是它允许序列中的任何位置为 0 例如:010010628 不应该是有效序列,因为有一个非前导 0。
此外,我将如何创建一个正则表达式,我可以用它来替换序列中的所有 0,但第一个?我尝试了以下方法,但它也替换了第一个 0。
String code = 010001234;
code = code.replaceAll("0+", "");
我怎样才能修改正则表达式来实现这一点?
解决方案
您可以使用
String NO_HYPHENS = "0[13](?!0*[1-9]0)[0-9]{6}[0-9]";
code = code.replaceAll("(?!^)0(?!$)", "");
请参阅正则表达式演示。正0[13](?!0*[1-9]0)[0-9]{6}[0-9]
则表达式匹配:
0
- 零[13]
- 一到三个(?!0*[1-9]0)
- 任何零后跟非零数字,然后在此位置不允许零[0-9]{6}
- 六位数[0-9]
- 一个数字。
我了解您在 Java 中使用它.matches
,否则,^
在开头和$
结尾添加。
此外,(?!^)0(?!$)
正则表达式将匹配不在字符串开始/结束位置的任何零。
推荐阅读
- python - 如何获取每个特征的 SHAP 值?
- javascript - 在 JavaScript 中未检测到有条件的对象
- python - django 项目不能与 apache2 一起使用,可以与内置的 web 服务器一起使用
- python - 如何判断一个值是否存在于 Spark 数据框中的任何位置?
- python - 当我在 model.fit() 中使用 validation_split 时会发生什么
- vue.js - VueJS / Jest:模拟多个获取响应
- python - 使用 Python 分组和聚合数据集
- paperjs - 带有 paper.js 的鼠标拖动的 ZigZag 路径
- sql - 在 SQL 中,如何根据范围计算值
- sql - Hive:如何将字符串转换为数组数组