2014-08-27 76 views
-1

使用正则表达式我有一个字符串(或ArrayList中)的数组是这样的:搜索Java中

strMain = "S1R2G3M1D1N3"; 

strMain由几个字母后面的数字作为后缀。

另外我有一个字符串是这样的:

str1 = "S1,,--R2,,,,D3-N3"; 

我需要看如果每个S1,R2,D3和N3在STR1是字符串strMain的阵列的一部分。 我无法弄清楚如何做到这一点。我想我需要拆分str1,这样我只能得到“数字后面跟着字母”的数组。然后我可以在strMain中检查这些字符串的存在。 任何人都可以建议正则表达式来拆分? 是否有任何其他方式,我们可以检查存在没有分裂(而不是使用正则表达式来搜索存在)

你能告诉我分解这个正则表达式吗?

+2

我不明白你在问什么。这似乎是[XY问题](http://xyproblem.info);也许[这](http://stackoverflow.com/a/24656216/3622940)将帮助你。 – Unihedron 2014-08-27 17:47:12

+0

我认为匹配比尝试分割更容易(更好)。 – Jerry 2014-08-27 17:57:02

回答

2

此正则表达式可以工作:[A-Z][0-9]

示例代码:

String strMain = "S1R2G3M1D1N3"; 
String str = "S1,,--R2,,,,D3-N3"; 
Pattern pattern = Pattern.compile("[A-Z][0-9]"); 
Matcher matcher = pattern.matcher(str); 
while (matcher.find()) { 
    if (strMain.contains(matcher.group())) { 
     System.out.println(matcher.group()); 
    } 
} 

给出了这样的输出

S1 
R2 
N3 

编辑

在回答您的评论...

有时数字可能不存在。什么表达?例如:str =“S ,, - R2 ,,,, - N3”将打印“SR2N3”。有时我可能必须包括单点或双点或单引号或两个单引号Ex:str =“S。,, - R2 .. ,,, D3-N3',N3”'“将打印S., R2 ...,N3',N3“。这里只有字母必须和数字,单点,双点,单引号或两个单引号都是可选的。

String strMain = "S1R2G3M1D1N3"; 
String str = "S.,,--R2...o,,,D3-N3',N3''"; 
Pattern pattern = Pattern.compile("([A-Z][0-9]?)(?:\\.{1,2}|'{1,2})?"); 
Matcher matcher = pattern.matcher(str); 
while (matcher.find()) { 
    if (strMain.contains(matcher.group(1))) { 
     System.out.println(matcher.group(0)); 
    } 
} 

给出了这样的输出:

S. 
R2.. 
N3' 
N3'' 

[A-Z]是一个大写字母。
[0-9]是一个数字。
X?是X,一次或零次。那么...
[0-9]?是一个数字,一个或零次。

括号创建一个捕获组,这意味着我们以后能抓住什么的括号之间匹配...

([A-Z][0-9]?)是要抓住一个大写字母和可选的一个数字。

然后以匹配点和单引号...

X{Y,Z}意味着匹配X,Y和Z之间的时间,所以...
X{1,2}意味着匹配X,1个2倍之间。
X|Y表示匹配X或Y.我将其括在括号中,否则整个表达式将进行OR运算。
\\.表示匹配一段时间。您不能只使用.,因为它具有特殊含义,即任何一个字符。因此,您必须使用\来逃避它,它本身也必须通过使用另一个逃脱java编译器。
(\\.{1,2}|'{1,2})表示匹配一个或两个句点,或一个或两个单引号,并捕获该组。
(?:X)意味着不捕获该组 - 我不在意捕获该组,因此将所有内容放在一起...
(?:\\.{1,2}|'{1,2})? - 匹配一个或两个句点,或者匹配一个或两个单引号,然后完成整个匹配一次或零次。

然后稍后您可以拨打matcher.group(...)获得捕获的组,从1开始。0表示整个匹配。因此,group(1)调用给我提供了字母数字部分,我用它来检查它是否存在。

看看这里的Javadoc:http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

+0

谢谢,工作正常。有时数字可能不存在。什么表达?例如:str =“S ,, - R2 ,,,, - N3”将打印“SR2N3”。有时我可能必须包括单点或双点或单引号或两个单引号Ex:str =“S。,, - R2 .. ,,, D3-N3',N3”'“将打印S., R2 ...,N3',N3“。这里只有字母必须和数字,单点,双点,单引号或两个单引号都是可选的。 – 2014-08-28 02:36:54

+0

@MaheshaPadyana我扩展了我的答案以帮助解决这个问题,并且为所使用的正则表达式添加了一些解释,希望它能够帮助您在将来编写自己的! – tobii 2014-08-28 18:27:02

+0

工程很棒。感谢各个参数的精彩解说。 – 2014-08-29 01:29:28