Java 使用正则表达式检查字符串的开头是否与模式匹配
我正在从一个.txt文件中读取行,我需要检查每一行是否“有效” 有效行以-2和2(含-2)之间的数字开头,后跟一个空格,然后可能是文本Java 使用正则表达式检查字符串的开头是否与模式匹配,java,regex,Java,Regex,我正在从一个.txt文件中读取行,我需要检查每一行是否“有效” 有效行以-2和2(含-2)之间的数字开头,后跟一个空格,然后可能是文本 “-1这是有效的。” “0这也是” “-2和这个” “2和这个” “-1这不是。” “-23也不是这个” 我想用正则表达式来实现这个,但是我很难让它正常工作。我对正则表达式很不熟悉。这是我的密码: public static List<Sentence> readFile(String filename) { List<Se
- “-1这是有效的。”
- “0这也是”
- “-2和这个”
- “2和这个”
- “-1这不是。”
- “-23也不是这个”
public static List<Sentence> readFile(String filename) {
List<Sentence> sentences = new LinkedList<>();
Pattern pattern = Pattern.compile("-[0-2] abc");
Matcher matcher;
try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
while (br.ready()){
matcher = pattern.matcher(br.readLine());
if (matcher.matches()){
System.out.print("matches ");
}
}
} catch (IOException e){
e.printStackTrace();
}
return sentences;
}
公共静态列表读取文件(字符串文件名){
列出句子=新建链接列表();
Pattern=Pattern.compile(“-[0-2]abc”);
匹配器匹配器;
try(BufferedReader br=new BufferedReader(new FileReader(filename))){
while(br.ready()){
matcher=pattern.matcher(br.readLine());
if(matcher.matches()){
系统输出打印(“匹配”);
}
}
}捕获(IOE异常){
e、 printStackTrace();
}
返回句子;
}
这不起作用(不奇怪)。有人能帮我找到正确的正则表达式吗?您可能正在寻找类似以下的正则表达式:
^(0|-?[1-2]) .*
^
符号匹配行首,(0 |…)
匹配0
或以下表达式,-?
匹配0或1次出现的-
,[1-2]
匹配1或2,
匹配空白,和*匹配除换行符以外的0个或更多项。您可能正在寻找类似以下内容的正则表达式:
^(0|-?[1-2]) .*
^
符号匹配行首,(0 |…)
匹配0
或以下表达式,-?
匹配0或1次出现的-
,[1-2]
匹配1或2,
匹配空白,而*只匹配0个或多个换行符。如果我没有弄错你的问题,你需要这样的模式:
-?[0-2]\s[\w\d\s]*
试试RegExr,它是一个非常好的基于web的工具,用于找出regex模式。如果我没有误解您的问题,您将需要以下内容作为您的模式: -?[0-2]\s[\w\d\s]*
试试RegExr,它是一个非常好的基于web的工具,用于找出regex模式。如果测试字符串是逐行分隔的,那么您可以逐行验证测试字符串
foreach (string line in lines)
{
match = Regex.Match(line, @"^(-?[1-2]\s.*|0\s.*)", RegexOptions.IgnoreCase);
if (match.Success)
{
MessageBox.Show(match.Groups[1].Value);
}
}
它验证测试字符串,并捕获有效字符串
如前所述,它仅在测试字符串被行分隔时起作用
修改正则表达式以满足由“\n”分隔的完整字符串
应该是
string regExp = @"(-?[1-2]\s.+[\n]{1}|(?<!-)0\s.+[\n]{1})";
MatchCollection matches = Regex.Matches(longstr, regExp, RegexOptions.IgnoreCase);
foreach(Match match in matches)
{
if (match.Success)
{
MessageBox.Show(match.Groups[1].Value);
}
}
string regExp=@”([1-2]\s.+[\n]{1}|)(-0无效,如果从表达式中删除^
)
因此,(?需要忽略-
作为第一个字符,当以下字符为0
时,如果测试字符串逐行分隔,则可以逐行验证测试字符串
foreach (string line in lines)
{
match = Regex.Match(line, @"^(-?[1-2]\s.*|0\s.*)", RegexOptions.IgnoreCase);
if (match.Success)
{
MessageBox.Show(match.Groups[1].Value);
}
}
它验证测试字符串,并捕获有效字符串
如前所述,它仅在测试字符串被行分隔时起作用
修改正则表达式以满足由“\n”分隔的完整字符串
应该是
string regExp = @"(-?[1-2]\s.+[\n]{1}|(?<!-)0\s.+[\n]{1})";
MatchCollection matches = Regex.Matches(longstr, regExp, RegexOptions.IgnoreCase);
foreach(Match match in matches)
{
if (match.Success)
{
MessageBox.Show(match.Groups[1].Value);
}
}
string regExp=@”([1-2]\s.+[\n]{1}|)(-0无效,如果从表达式中删除^
)
因此,(?需要忽略-
作为第一个字符,当下面的字符是0
“-0有效吗?”
不,只有0。对不起,应该包括这个。谢谢。另外,文本可以包含哪些字符(在末尾)包含?将abc
替换为\\w*
空格后的字符可以是任何字符,也可以是任何字符“-0是否有效?”
否,仅为0。对不起,应该包含该字符。谢谢。另外,文本(结尾)可以包含哪些字符包含?将abc
替换为\\w*
空格后的字符可以是任何字符,也可以是任何字符。下一个投票人是否愿意解释错误-我非常乐意修复它。这工作正常,谢谢(我没有下一个投票)->也谢谢你的解释。支持率较低的选民是否愿意解释问题所在?我非常乐意解决。这很有效,谢谢(我没有支持率较低)->也谢谢你的解释。这也会匹配-0
哦,对了,错过了,谢谢狄龙的更正。这也会匹配-0
哦,对了,错过了,谢谢狄龙的更正。