Java Regex:两个不同的字符串,第一个没有正确拆分



我有两个示例字符串:

"Seat 7: Bug One [ME] (82 power)"

"Bug One [ME] : xx xxxxx xxxxxx"

我需要能够在Bug One [ME]上从两个字符串中分离,这样我就可以用不同的文本替换它。我目前使用的正则表达式是:

":? ?[^\[ME\]]*\[ME\] ?:? ?"

但当我尝试这个时,我得到了以下不正确的字符串:

"" <-- empty string (which is wrong)

"(82 power)" <-- which is right

我想要"Seat 7: "而不是空字符串。

我是Java正则表达式的新手,有人能帮我找出我做错了什么吗?

谢谢!

编辑:每个人都建议我试着在"Bug One[ME]"上进行拆分,但不幸的是,"Bug One"可能会改变。例如,我可以是"Fox Seven[ME]",我需要能够在这个字符串上进行拆分。

为了全局替换<some text> [ME],您需要这样的正则表达式:

(?<=: )[^[]+[ME]|^[^[]+[ME](?= :)

说明:

  • (?<=: )查找:查找正则表达式前面的": "
  • [^[]+查找一个或多个非[字符
  • [ME][ME]完全匹配
  • | RegEx OR
  • ^匹配字符串的开头
  • [^[]+查找一个或多个非[字符
  • [ME][ME]完全匹配
  • (?= :)前瞻:在正则表达式之后立即查找" :"

RegEx演示

与前面的答案一样,我认为您有点过于复杂了:(

(.*)(Bug One [ME] )(.*)

如果您想要"Seat 7:"one_answers"(82power(",并且您确信":"和[ME]之间只有2个单词:,则需要使用以下内容

String s = "Seat 7: Bug One [ME] (82 power)";
    String[] sArr=  s.split(" (\w+) (\w+) \[ME\]"); 

相关内容

最新更新