我想在以下字符串中提取/匹配子串/大小"| XS | XL | S | M |" 使用正则表达式.在这种特殊情况下,XS,XL,S和M.
我尝试了以下正则表达式但没有成功.
\|(\w+)\|
Run Code Online (Sandbox Code Playgroud)
比赛:XS,S
(?=.(\w+))
Run Code Online (Sandbox Code Playgroud)
匹配:XS,S,XL,L,S,M
第一场比赛的问题是消耗管道,所以它们不适合下一场比赛.
第二种模式有点复杂,但你要说的是字符串中的每个字符都会抓住它后面的所有单词字符,而不会消耗它们.因此,在第一个管道处XS,引擎然后移动到X答案所在的位置S.然后引擎移动到S模式不匹配的位置.
您需要使用正面外观,因此您可以在不消耗管道的情况下匹配和使用管道之间的文本.您希望,对于任何单词字符组,断言它在其前后都有一个管道.在这种情况下,您想要使用它.
如果您的语言支持它(您没有提到您使用的是哪种正则表达式引擎),则此模式将起作用:
(?<=\|)[^|]++(?=\|)
Run Code Online (Sandbox Code Playgroud)
(?<=\|) 断言模式背后有一条管道[^|]++ 占有率地匹配所有非管道字符(?=\|) 断言模式后面有一个管道这是Java中的一个测试用例(忽略\\,只有Java语法):
public static void main(String[] args) throws Exception {
final String test = "|XS|XL|S|M|";
final Pattern pattern = Pattern.compile("(?<=\\|)[^|]++(?=\\|)");
final Matcher matcher = pattern.matcher(test);
while(matcher.find()) {
System.out.println(matcher.group());
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
XS
XL
S
M
Run Code Online (Sandbox Code Playgroud)