2010-09-26 83 views
-3

几个问题:我怎样才能匹配|的系列与Java正则表达式?

1)如何使基于搜索文字的以下正则表达式^工作为搜索文字|

搜索文字^基于正则表达式(这工作得很好,这是从这个论坛的宝贵投入一个):

String intermediateResult = in.replaceAll("(TEST\\^[^^]*\\^\\^[^^]*\\^[^^]*\\^)\"\"\\^", "$1^"); 
String finalResult = intermediateResult.replaceAll("(TEST\\^[^^]*\\^)(\\^[^^]*\\^[^^]*\\^([^\"\\^].*|\"[^\"].*))", "$1ST$2"); 

当我更换^(何地需要)|如下 - 我没有得到期望的结果(不指定字符串中的任何改变):

String intermediateResult = in.replaceAll("(TEST\\|[\\|\\|]*\\|[\\|\\|]*\\|[\\|\\|]*\\|[\\|\\|]*\\|)\"\"\\|", "$1|"); 
String finalResult = intermediateResult.replaceAll("(TEST\\|[\\|\\|]*\\\\|)(\\|[\\|\\|]*\\|[\\|\\|]*\\|([^\"\\^].*|\"[^\"].*))", "$1ST$2"); 

是否有任何已知问题|在Java的正则表达式或我需要有不同的搜索字符的正则表达式|

所以,我想通过这种方式,却徒劳无功(有\\ |代替\ |):

首先正则表达式改变了像所有的地方|“” |在给定的字符串中,尽管我希望只有在第5次和第6次出现|时才会使其变为空白是“”,不知道为什么。 由于某种原因,第二个正则表达式完全不会改变字符串。

String intermediateResult = in.replaceAll("(TEST\\|[\\|\\|]*\\\\|[\\|\\|]*\\\\|[\\|\\|]*\\\\|[\\|\\|]*\\\\|)\"\"\\|", "$1|"); 
String finalResult = intermediateResult.replaceAll("(TEST\\|[\\|\\|]*\\\\|)(\\\\|[\\|\\|]*\\\\|[\\|\\|]*\\|([^\"\\^].*|\"[^\"].*))", "$1ST$2"); 

2)此外,这是什么正则表达式匹配的部分,并更换STR暗示:

String finalResult = intermediateResult.replaceAll("(TEST\\^[^^]*\\^)(\\^[^^]*\\^[^^]*\\^ 
**([^\"\\^].*|\"[^\"].*)**)", "**$1ST$2**"); 

的混乱和长后感到十分抱歉;为了清楚起见,我将仅发布一个问题并将其他问题发布在另一个帖子中。

在阐述从原始电子邮件的第一个问题:

我有以下的字符串(每个线由\ r \ n隔开)。第一个与搜索字符相关的正则表达式|应该检查第二次和第三次出现的内容是空白的,如果第5和第6之间的内容|是“”,然后将其设为空白。

第二次正则表达式(再次涉及| |)必须看看第5次和第6次之间的内容是否出现|不为空且不为空,则将第二次和第三次之间的内容作为ST。

实施例,如下所示:

现有字符串:

TEST|X||Y||**""**|C|""|\r\n\ 
TEST|Z||Y||SOMETHING OTHER THAN "" OR empty||\r\n\ 

希望的输出,当|两个相关的正则表达式replaceall()从原始发布的运行:

TEST|X||Y|||C|""|\r\n\ 
TEST|Z|**ST**|Y||SOMETHING OTHER THAN "" OR empty||\r\n\ 
+3

请详细说明你的问题。你想表达什么? *对于搜索字面值有什么作用| *是什么意思? – 2010-09-26 15:41:56

+2

Java中的正则表达式!请停止伤害我的眼睛! ......在更严肃的语气中,当正则表达式不被Java的这个缺点变得更加难以理解时,正则表达式问题会好得多。只需发布正则表达式并摆脱Java。除非这个问题实际上是关于Java的(我无法理解它)。 – 2010-09-26 16:09:46

+1

不要在单个帖子中提出多个问题。 – 2010-09-26 16:14:45

回答

1

我发现一个错误您的转换。模式[^^]的意思是“一个字符,这不是'^'”。因此,要将它转换为“|”,它将是[^|](在[]内部,|不需要转义|)。

现在我要拿叉子刺我的眼睛。我再也不想看到这些了。

+0

感谢您的输入!很抱歉,很长的正则表达式。所以你提到的更正是在第二个正则表达式中 - String finalResult = intermediateResult.replaceAll(xxxxx)在第二个代码片段中提到?再次感谢! – 2010-09-26 20:20:23

+0

是的,用[^ |]替换所有[\\ | \\ |]。 – Cephalopod 2010-09-26 20:39:54

+0

谢谢。我做了这个改变,但ST在测试时没有放置在所需的位置。更改内容如下: – 2010-09-26 21:34:27