我正在编写一个词汇表算法,用于检查用户是否正确输入了该词。我有以下情况: 这个词的正确解决方案是“part1,part2”。 用户应该能够输入“part1”(答案1),“part2”(答案2)或“part1,part2”(答案3)。 我现在尝试将用户给出的字符串与以下自动创建的正则表达式匹配:
^(part1|part2)$
这只会使答案1和2正确,而答案3则是错误的。我现在想知道是否有类似于|的运算符用and/or
代替either...or
。
愿任何人帮我解决这个问题吗?
答案 0 :(得分:236)
我将假设您想要动态构建正则表达式以包含除part1和part2之外的其他单词,并且您希望顺序无关紧要。如果是这样,你可以使用这样的东西:
((^|, )(part1|part2|part3))+$
肯定匹配:
part1
part2, part1
part1, part2, part3
否定匹配:
part1, //with and without trailing spaces.
part3, part2,
otherpart1
答案 1 :(得分:23)
'^(part1|part2|part1,part2)$'
有效吗?
答案 2 :(得分:5)
这是否可以不交替使用?
^((part)1(, \22)?)?(part2)?$
或者为什么不呢?
^((part)1(, (\22))?)?(\4)?$
第一个适用于除part2
之外的所有条件(使用GNU sed 4.1.5)
答案 3 :(得分:3)
不是正则表达式的专家,但您可以^((part1|part2)|(part1, part2))$
。用词:“第1部分或第2部分或两者”
答案 4 :(得分:2)
或者你可以使用它:
^(?:part[12]|(part)1,\12)$
答案 5 :(得分:1)
使用
如果在vim中:
:s/{\|}/"/g
将替换“上的{和} 所以{lol}变成“ lol”