Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式,用于使用一个或多个单词作为搜索键匹配一行_Java_Regex_String - Fatal编程技术网

Java 正则表达式,用于使用一个或多个单词作为搜索键匹配一行

Java 正则表达式,用于使用一个或多个单词作为搜索键匹配一行,java,regex,string,Java,Regex,String,假设我们有一个格式如下的字符串: 第1部分第2部分:第3部分 第1部分和第2部分通常是包含小写和大写字母的单词,第3部分可以是包括标点符号在内的数字和字符的任意组合。此外,在以下位置之前或之后可以有多个空间: 我将编写一个正则表达式来匹配这样的字符串。例如,如果示例字符串如下所示: String sample1 = "Total Amount: $1,000"; String sample2 = "Company: Google Inc."; 搜索amount、total或total amou

假设我们有一个格式如下的字符串:

第1部分第2部分:第3部分

第1部分和第2部分通常是包含小写和大写字母的单词,第3部分可以是包括标点符号在内的数字和字符的任意组合。此外,在以下位置之前或之后可以有多个空间:

我将编写一个正则表达式来匹配这样的字符串。例如,如果示例字符串如下所示:

String sample1 = "Total Amount: $1,000";
String sample2 = "Company: Google Inc.";
搜索amount、total或total amount等键以匹配sample1字符串。同时搜索一个键,比如我想匹配sample2字符串的公司

编辑:

因此,如果我们有一个类似上面示例的字符串,通过搜索 我们应该退回样品 串成一根火柴。而且,重要的是:1该行不仅应包含键,还应遵循该行的指定格式,2用户输入键

这是我现在拥有的正则表达式:

String reg = "[tTOoTtAaLl0-9.,\/#!$%\^&\*;:{}=\-_`~( ) ]+:[A-Za-z0-9.,\/#!$%\^&\*;:{}=\-_`~( ) ]+";

但是,我的正则表达式与整行不匹配。值得指出的是,我使用Java,假设样本字符串存储在样本中,我使用sample.matchesreg检查字符串是否匹配。

不确定我是否正确理解您的要求,但这里有两个基于您的数据和我想您想要得到的信息的示例:

仅获取美元金额的1个示例:

2获取匹配的完整字符串的示例:

考虑到使用Java与regex101.com的语法不同,您应该转义一些字符

处理以下情况:

aaa bbb!   : $34 
Total Amount: $1,000
njhjh hjh: $33
Google Google1: $100

输出:

Full string matched: Total Amount: $1,000
Amount only from matched string: 1,000
Full string matched: Total Amount: $1,000
Full string matched: Total Amount: $1,000
评论后编辑:

然后,在阅读您的评论后,您希望看到以下内容:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class test {
public static void main(String[] args) {
    String userKey = "Amount";
    System.out.println("Full string matched: " + getMatch(userKey));

    userKey = "total";
    System.out.println("Full string matched: " + getMatch(userKey));
}

private static String getMatch(String key) {
    // Case: Getting full string for userKey (case insensitive) matches
    Pattern p1 = Pattern.compile(String.format("(?i)(.*%s.*\\s?.*:\\s*?\\$.*)", key));
    Matcher matcher1 = p1.matcher("Total Amount: $1,000");
    if (matcher1.matches()) {
        return matcher1.group(1);
    }
    return "";
}
}
输出:

Full string matched: Total Amount: $1,000
Amount only from matched string: 1,000
Full string matched: Total Amount: $1,000
Full string matched: Total Amount: $1,000
说明:

?i>搜索不区分大小写的 %s>只需使用String.format方法将userKey变量放入该%s占位符中即可
第1部分和第2部分中的大部分时间是一个单词的大部分时间,这是什么意思?java正则表达式:^\\w*\\w*\\w*\\w*\\d*\\w*\\d*这与以下两个示例相匹配:总额:$1000 asdasd asdasd:$121.11只要前面只有两个单词,这就有效:。如果您只想检查字符串是否包含金额或总额,您可以使用.contains方法。您的要求不清楚,根据您所写的内容,您可以使用^\\w+\\s+\\w+\\s*:\\s*.*.Aha,现在您可以讨论要求了。。。请尝试^Total Amount | Total | Amount\\s*:\\s****$。最新编辑不会澄清任何内容。在regex中没有类似的代码,您应该手动编码模式中的所有可能性。有什么确切的值,它们的列表,它们的变化,字符的类型?如果要匹配总额:$1000,为什么要匹配总额?金额呢?具体来说,它是正则表达式。我想要这样的东西:如果用户输入一个键,比如Amount或Total或Total Amount,那么Total Amount:$1000将作为匹配项返回。正则表达式中唯一缺少的就是搜索键,这是我的主要问题。我们应该如何在正则表达式中包含这些键以找到完全匹配的行?我已经添加了另一个解决方案,我想它“匹配”了您的需要。希望有帮助:谢谢你的回复。只是一个简单的问题:如果我们有这样的东西:公司:谷歌公司和搜索键是公司,似乎目前的正则表达式不适用于这一个。换句话说,第3部分不一定是带美元符号的数字。编辑:只是想:我们应该简单地删除它\\$