java - Java Regex - 验证字符串是否包含由句点 (.) 分隔的非空修剪标记
问题描述
我正在尝试编写一个正则表达式,用于识别字符串是否包含由 分隔的非空标记(修剪后).
,即以下形式。这是我想出的最好的。
Pattern.compile("^(?!\\.)(?!.*\\.$)(?!.*?\\.\\.)(?!\\p{Space}$)(?!\\p{Space}\\.)(?!.*\\.\\p{Space}$)[\\p{Graph}\\p{Space}]+$", Pattern.UNICODE_CHARACTER_CLASS);
单元测试存在于以下代码中: https ://ideone.com/kuej3D
这适用于所有情况。然而,我觉得有更好的方法来做同样的事情。
例如,
如何检查表格的格式,
<s1><.s2>*
s1
是修剪前导和尾随空格后的非空字符串。
.
是字面时间
s2
是修剪前导和训练空间后的非空字符串。
*
表示出现的次数可以最小为 0,最大为无限。
前任:
alpha$#@.ksj`\\c.lijd*3260_+
是一个有效的字符串
a b. c d. e f
是一个有效的字符串
alpha.
是无效字符串
.beta
是无效字符串
空字符串是无效字符串
是无效字符串
x..y..z
是无效字符串
上面 ideone 代码中的所有测试用例都应该打印true
.
解决方案
试试这个正则表达式:
"\\s*[^.\\s]+\\s*(\\.\\s*[^.\\s]+\\s*)*"
对于修剪,它匹配开头、每个点之前和之后以及结尾的可选空格。不修剪可能更容易阅读:
"[^.\\s]+(\\.[^.\\s]+)*"
此模式匹配不是点也不是空格的东西,可选地多次跟随.
不是点而不是空格的东西。
推荐阅读
- python - Python - 如果我增加列表的大小,为什么我的 for 循环的长度函数不会改变
- c# - 数据库和数据集中日期时间格式的区别
- design-principles - 谁首先创建了 WET 原则?
- react-native - 如何使用 Asyncstorage 在第二个屏幕上保存和查看 JSON 数据?
- java - HttpURLConnection vs Volley 或 Retrofit
- netlogo - Tick Reporter 进行品种颜色转换
- swift - 为什么我收到错误“EXC_BAD_ACCESS”
- reactjs - FlatList 渲染对于大数据集来说很重
- r - 将 2 列中的值与另一个字符列中的相应位置匹配
- algorithm - 使用特定方法拆分二叉树