我想有一个正则表达式,可以接受数字以及特定的特殊字符(users = contest.participants.annotate(
cost_sum=Coalesce(
Sum(
Subquery(
ContestTaskRelationship.objects.filter(
contest=contest,
solved=OuterRef('id')
).values('cost').all()
)
),
V(0),
output_field=IntegerField()
)
)
)。我刚刚了解了正则表达式的基础知识,但我不知道我的模式为什么不起作用,真的需要建议。
我的模式
ContestTaskRelationship
(.-,
)只能重复一次,即 ^(([0-9]*)+[.,\-]{0,1})$
。另外first应该是数字,last也应该是数字。我真的需要一点推动力。
预期产量
.,-
答案 0 :(得分:3)
您可以使用简单模式^(?:\d+[.,-])*\d+$
\d+
.,-
的一个字符:[.,-]
(?:\d[.,-])*
()?:
未捕获性能)\d+
String[] array = {"122-555-1521", "155--122", "155,-", ".-12", "123.123."};
String pattern = "^(?:\\d+[.,-])*\\d+$";
for(String str : array){
System.out.println(str+" "+str.matches(pattern));
}
122-555-1521 true
155--122 false
155,- false
.-12 false
123.123. false
答案 1 :(得分:1)
如果我的理解正确,您想匹配一组数字,用[。,-]中的单个非数字字符分隔吗?
[0-9] +([。,\-] [0-9] +)*