使用正则表达式从输入字符串中获取键值字符串?

SomeDude

我正在尝试使用正则表达式在字符串中查找键,值对(不确定这是否明智!),这是我的字符串:

key1=key1 value key2=key2 value_key3=something key3=key3_value

key1key2key3是关键。如您所见,值可以有空格,然后等待...如果您看到的值key2,则它包含key3在其中(key2 value_**key3**=something)!抱歉,这是我的输入方式。

还没结束。我可以按以下任何顺序获取键:

key3=key3_value key1=key1 value key2=key2 value_key3=something
key2=key2 value_key3=something key1=key1 value key3=key3_value

现在我想有一个正则表达式,可以为我找到正确的键,值组,以便以后可以构建键值对,例如:

key1=key1 value
key2=key2 value_key3=something
key3=key3_value

我尝试了regex key1=(.*)key2=(.*)key3=(.*),但这仅适用于第一个字符串。如果我更改第二和第三字符串中的键顺序,它就消失了!

SomeDude

经过一番认真的思考,这确实是可以解决的,有点棘手:

我面临的最重要的问题是键的顺序,否则正则表达式key1=(.*)key2=(.*)key3=(.*)就足够了。

所以我首先通过使用Java收集键来获得键的顺序 indexOf

然后,我使用该命令构建正则表达式运行时,代码如下:

List<String> myPropKeys = new ArrayList<String>();
myPropKeys.add("key1");
myPropKeys.add("key2");
myPropKeys.add("key3");

String input1 = "key1=key1 value key2=key2 value_key3=something key3=key3_value";
String input2 = "key3=key3_value key1=key1 value key2=key2 value_key3=something";
String input3 = "key2=key2 value_key3=something key1=key1 value key3=key3_value";

Map<String, String> propMap = getPropValues(input1, myPropKeys);
propMap = getPropValues(input2, myPropKeys);
propMap = getPropValues(input3, myPropKeys);
System.out.println();



private static Map<String, String> getPropValues( String input, List<String> myPropKeys )
{
     Map<String, String> propValues = new HashMap<String, String>();

     StringTokenizer tokens = new StringTokenizer( input );
     List<String> propKeyList = new ArrayList<String>();
     while( tokens.hasMoreTokens() )
     {
         String token = tokens.nextToken();
         int equalsIndex = token.indexOf( "=" );
         if( equalsIndex != -1 )
         {
             String propertyToken = token.substring( 0, equalsIndex );
             if (myPropKeys.contains(propertyToken))
             {
                propKeyList.add( propertyToken );
             }

         }
      }

      StringBuilder sb = new StringBuilder();
      for ( String propKey : propKeyList )
      {
        sb.append( propKey + "=" );
        sb.append( "(.*)" );
      }

      Pattern p = Pattern.compile(sb.toString());
      Matcher m = p.matcher(input);

      List<String> values = new ArrayList<String>();
      if (m.find())
      {
        for ( int i = 1; i <= propKeyList.size(); i++ )
        {
            values.add(m.group(i));
        }

      }

      if ( propKeyList.size() == values.size() )
      {
        for ( int i = 0; i < propKeyList.size(); i++ )
        {
            propValues.put( propKeyList.get(i), values.get(i).trim() );
        }
      }

       return propValues;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用正则表达式从字符串中获取数字?

来自分类Dev

从正则表达式获取字符串中的字符串

来自分类Dev

使用正则表达式检查输入字符串中的无效字符

来自分类Dev

使用正则表达式在JSON字符串中获取特定值

来自分类Dev

使用正则表达式从R中的字符串中获取数据

来自分类Dev

使用正则表达式从特殊字符前后的字符串中获取数字

来自分类Dev

使用正则表达式在Powershell中的给定字符串中获取=之后的值

来自分类Dev

如何使用正则表达式从框架中定义的输入字符串中获取字符串

来自分类Dev

使用bash和正则表达式获取字符串中的数字

来自分类Dev

正则表达式-获取部分字符串

来自分类Dev

使用正则表达式从字符串中获取子字符串

来自分类Dev

键值对的正则表达式降价字符串

来自分类Dev

使用正则表达式从数据中获取特定字符串

来自分类Dev

如何使用正则表达式从字符串中获取数字

来自分类Dev

使用正则表达式从字符串中获取经度/经度

来自分类Dev

正则表达式从字符串中获取字符串

来自分类Dev

使用正则表达式从字符串日期获取子字符串

来自分类Dev

使用正则表达式从R中的字符串中获取数据

来自分类Dev

使用正则表达式从特殊字符前后的字符串中获取数字

来自分类Dev

字符串中的正则表达式键值

来自分类Dev

使用正则表达式从字符串中的提取字符串

来自分类Dev

使用正则表达式获取多个可能字符串的子字符串

来自分类Dev

正则表达式从字符串中获取子字符串

来自分类Dev

正则表达式从输入字符串中获取一些值

来自分类Dev

使用正则表达式拆分键值中的字符串

来自分类Dev

正则表达式验证输入字符串

来自分类Dev

如何使用正则表达式从字符串中删除特定字符串

来自分类Dev

使用ruby中的正则表达式从字符串中获取子字符串

来自分类Dev

使用正则表达式搜索字符串中的子字符串

Related 相关文章

  1. 1

    如何使用正则表达式从字符串中获取数字?

  2. 2

    从正则表达式获取字符串中的字符串

  3. 3

    使用正则表达式检查输入字符串中的无效字符

  4. 4

    使用正则表达式在JSON字符串中获取特定值

  5. 5

    使用正则表达式从R中的字符串中获取数据

  6. 6

    使用正则表达式从特殊字符前后的字符串中获取数字

  7. 7

    使用正则表达式在Powershell中的给定字符串中获取=之后的值

  8. 8

    如何使用正则表达式从框架中定义的输入字符串中获取字符串

  9. 9

    使用bash和正则表达式获取字符串中的数字

  10. 10

    正则表达式-获取部分字符串

  11. 11

    使用正则表达式从字符串中获取子字符串

  12. 12

    键值对的正则表达式降价字符串

  13. 13

    使用正则表达式从数据中获取特定字符串

  14. 14

    如何使用正则表达式从字符串中获取数字

  15. 15

    使用正则表达式从字符串中获取经度/经度

  16. 16

    正则表达式从字符串中获取字符串

  17. 17

    使用正则表达式从字符串日期获取子字符串

  18. 18

    使用正则表达式从R中的字符串中获取数据

  19. 19

    使用正则表达式从特殊字符前后的字符串中获取数字

  20. 20

    字符串中的正则表达式键值

  21. 21

    使用正则表达式从字符串中的提取字符串

  22. 22

    使用正则表达式获取多个可能字符串的子字符串

  23. 23

    正则表达式从字符串中获取子字符串

  24. 24

    正则表达式从输入字符串中获取一些值

  25. 25

    使用正则表达式拆分键值中的字符串

  26. 26

    正则表达式验证输入字符串

  27. 27

    如何使用正则表达式从字符串中删除特定字符串

  28. 28

    使用ruby中的正则表达式从字符串中获取子字符串

  29. 29

    使用正则表达式搜索字符串中的子字符串

热门标签

归档