Skip to content
Advertisement

How to correct the string returned based on a regex

Here is the message and Type

message Type
IND SMD 0402 1.2nH 50pH 390mA 100MOHM MAG

What i’m trying to return is the 1.2nH

For that i created a function as below

public static String SplitStringValue1(String message,String type ) {

String[] SplitMessage = message.split(" ");
String ch="";

if (type.equals("MAG"))
   { 
      if (SplitMessage[0].matches("IND\d(.*)")||SplitMessage[0].equals("IND")||SplitMessage[0].matches("SELF\d(.*)")||SplitMessage[0].equals("SELF"))
      {
          
         if (SplitMessage[1].equals("SMD"))
         { 
               
         for (int j=0;j<SplitMessage.length;j++)
         {
            if ((SplitMessage[j].matches("(-)*\d*(\.)?\d*(\/)?\d*(.)?d*(UH|uH|MH|mH|nH|NH|H|h)")&&SplitMessage[j].length()<15))
            {
                ch=SplitMessage[j];  
            }
         }
         }
      }
    
   }

return   ch;
}

This is returning me 50pH but actually i’m trying to return 1.2nH

How could i correct my function ?

Advertisement

Answer

If you use the code to check if the type is MAG, you can use a bit more specific pattern to get the value 1.2nH with a single capture group

^INDb.*?h(d*.?d+(?:(?:[UuMmNn])?H|h))b

Explanation

  • ^ Start of string
  • INDb Match the word IND
  • .*?h Match as least as possible chars and then a space
  • ( Capture group 1
    • d*.?d+ Match 1+ digits with an option decimal part
    • (?:(?:[UuMmNn])?H|h) Match UH uH etc.. or just H or h
  • ) Close group 1
  • b A word boundary

Regex demo

In Java

String regex = "^IND\b.*?\h(\d*\.?\d+(?:(?:[UuMmNn])?H|h))\b";

See a Java demo

Advertisement