我有一个逗号分隔的字母数字值的字符串。如果它们的长度恰好为2个字符,并且它们至少有1个字母字符,则认为这些值有效。如果所有值都有效,那么我想“捕获”整个字符串,包括逗号。如果缺少值(背对背逗号),则整个字符串无效。我只能使用正则表达式。空格被忽略,使用的编程语言是Java
答案 0 :(得分:2)
我只想使用以下表达式强行推迟这个
\d[A-Z]|[A-Z]{2}|[A-Z]\d
- \d[A-Z] - digit followed by uppercase A-Z characters
- [A-Z]{2} - 2 uppercase A-Z characters
- [A-Z]\d - uppercase A-Z character followed by a digit
下面是故障:
在你的情况下,2个字符有3个特殊情况,它们是有效的
( - start group
(\d[A-Z]|[A-Z]{2}|[A-Z]\d) - group as explained above
,\s - followed by comma and space
)* - entire group 0 or more times
然后使用它作为基础我做了一个表达式,表示我需要一组逗号后跟逗号和空格0次或更多次
( - start group
\d[A-Z]|[A-Z]{2}|[A-Z]\d - group as explained above
) - end group
,? - 0 or 1 trailing comma
$ - match end of line
然后我用相同的表达式跟着它,但添加了一些额外的修饰符
String expression = "((\\d[A-Z]|[A-Z]{2}|[A-Z]\\d),\\s)*(\\d[A-Z]|[A-Z]{2}|[A-Z]\\d),?$";
System.out.println("3F, 4B, AA, A4B".matches(expression)); // false
System.out.println("3F, 4B, 55, A4".matches(expression)); // false
System.out.println("3F, 4B, 5A, A4".matches(expression)); // true
System.out.println("3F, 4B,,".matches(expression)); // false
System.out.println("3F, 4B, AA, A".matches(expression)); // false
System.out.println("3F, 4B, AA,".matches(expression)); // true
Theres可能是一种更优雅的表达方式,但这种方式看起来非常简单。下面是一些使用它的Java示例。
<powco-interface name="form" data="{{data}}"></powco-interface>
Theres有很多非常好的网站,可让您在浏览器中测试正则表达式并立即获得反馈。这是构建和测试正则表达式的好方法,很多时候甚至在页面上有一个很好的解释,告诉你你写的表达式。
尽管这些网站中有许多不提供用于表达式评估的Java环境,但大多数语言对于正则表达式具有相同或非常接近相同的规范。为了构建这个表达式,我在Javascript中测试它,然后在java中运行它以确保它有效。下面是保存表达式的链接,以便您自己测试https://regex101.com/r/uP4oY2/1
答案 1 :(得分:2)
首先,您可以将有效格式简化为[Alpha + Digit] [Alpha]或[Alpha] [Alpha + Digit]:
String regex = "[a-zA-Z][a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z]"
然后你想在它周围允许任意数量的空格:
String regex = "\\s*([a-zA-Z][a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z])\\s*"
你希望它后面跟一个逗号,除非它是字符串的结尾:
String regex = "\\s*([a-zA-Z][a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z])\\s*(,|$)"
这种模式可以重复任意次数(一次或多次):
String regex = "(\\s*([a-zA-Z][a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z])\\s*(,|$))+"
答案 2 :(得分:1)
好的,所以想法是将三个组连接起来或
(Alpha Digit or Digit Alpha or Alpha Alpha)
然后我们将允许末尾的空格
whitespace zero or more (Alpha Digit or Digit Alpha or Alpha Alpha) whitespace zero or more
最后,我们将用逗号重复这4次。
答案 3 :(得分:1)
您可以尝试使用正则表达式:
var doughnutData = [
{
value: somevar,
label: 'My Caption',
color: '#811BD6'
},{
value: 20,
label: 'cap 2',
color: '#D18177'
},
{
value : 40,
label: 'cap 3',
color: '#6AE128'
},
];
这个正则表达式可以在java中用作
^((\s+)??(\d[a-z]|[a-z]\d|[a-z]{2}),?)+?$
测试用例:
boolean foundMatch = text.matches("(?ismd)^((\\s+)??(\\d[a-z]|[a-z]\\d|[a-z]{2}),?)+?$");