显然,您可以使用|(管道?)来表示OR,但有没有办法表示AND?
具体来说,我想匹配包含某个短语的所有文本的段落,但没有特定的顺序.
我有一个逗号分隔文件,其中许多行类似于下面的一行.
Sachin,,M,"Maths,Science,English",Need to improve in these subjects.
Run Code Online (Sandbox Code Playgroud)
引号用于转义用于表示多个值的分隔符逗号.
现在如何使用String.split()if来分割逗号分隔符上的上述值?
我喜欢用Java编写代码高尔夫(即使Java方式太冗长而不具竞争力),它正在以尽可能少的字节完成一定的挑战.在我的一个答案中,我有以下代码:
for(var p:"A4;B8;CU;EM;EW;E3;G6;G9;I1;L7;NZ;O0;R2;S5".split(";"))
Run Code Online (Sandbox Code Playgroud)
在我们将它转换为带有的字符串数组后,它基本上遍历2-char字符串.split.有人建议我可以把它打到这个而不是节省4个字节:
for(var p:"A4B8CUEMEWE3G6G9I1L7NZO0R2S5".split("(?<=\\G..)"))
Run Code Online (Sandbox Code Playgroud)
功能仍然相同.它循环遍历2个字符串.
但是,我们都没有100%确定这是如何工作的,因此这个问题.
我知道的:
我知道.split("(?<= ... )")用于拆分,但保留尾随分隔符.
还有一种方法可以将前导分隔符或分隔符保留为分隔项:
"a;b;c;d".split("(?<=;)") // Results in ["a;", "b;", "c;", "d"]
"a;b;c;d".split("(?=;)") // Results in ["a", ";b", ";c", ";d"]
"a;b;c;d".split("((?<=;)|(?=;))") // Results in ["a", ";", "b", ";", "c", ";", "d"]
Run Code Online (Sandbox Code Playgroud)
我知道\G用来在遇到不匹配后停止.
编辑:\G用于指示最后一个匹配结束的位置(或第一次运行的字符串的开头).修正了@SebastianProske的定义.
int count = 0;
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("match,");
java.util.regex.Matcher matcher = pattern.matcher("match,match,match,blabla,match,match,");
while(matcher.find())
count++;
System.out.println(count); // Results in 5
count = 0;
pattern = java.util.regex.Pattern.compile("\\Gmatch,");
matcher = …Run Code Online (Sandbox Code Playgroud) 我希望能够将字符串文字与转义引用选项匹配.例如,我希望能够搜索"这是一个'转换''值'确定'的测试"并让它正确识别反斜杠作为转义字符.我尝试过如下解决方案:
import re
regexc = re.compile(r"\'(.*?)(?<!\\)\'")
match = regexc.search(r""" Example: 'Foo \' Bar' End. """)
print match.groups()
# I want ("Foo \' Bar") to be printed above
Run Code Online (Sandbox Code Playgroud)
看了这个之后,有一个简单的问题,即使用的转义字符" \"不能自行转义.我无法弄清楚如何做到这一点.我想要一个类似下面的解决方案,但负面的lookbehind断言需要固定长度:
# ...
re.compile(r"\'(.*?)(?<!\\(\\\\)*)\'")
# ...
Run Code Online (Sandbox Code Playgroud)
任何正则表达式大师都能解决这个问题吗?谢谢.