我有String,其值可能如下所示。
在这里我需要从索引4开始直到找到这些模式中的任何一个/ 00000101 /或[I 131]
预期产出:
我已尝试使用以下RegEx进行相同的
(适用:^ {3}。)(*)(?:[[/] [A-Z0-9 \ S] + [] / \ S +])
但是如果字符串包含[/但它不适用于这些模式不存在的case1,则此RegEx可以工作。
我试过添加?最后但它在案例1中起作用,但对案例2和3不起作用。
有人可以帮我解决regx问题吗?
答案 0 :(得分:0)
你的逻辑很难说。我的解释是你总是希望从第4个角色开始捕捉。捕获的其他内容取决于输入的其余部分。如果出现/00000101/
或[I 131]
,那么您希望在此之前进行捕获。否则,您想要捕获整个字符串。把这一切放在一起产生这个正则表达式:
^.{3}(?:(.*)(?=/00000101/|\[I 131\])|(.*))
答案 1 :(得分:0)
你可以试试这个:
^.{3}(.*?)($|(?:\s*\/00000101\/)|(?:\s*\[I\s+131\])).*$
并替换为此以获得您想要的确切输出。
\1
说明:
^
- >开始一个字符串.{3}
- >后跟3个字符(.*?)
- >其次是什么?意味着懒惰它将获取,直到找到以下内容并且不会超出该范围。它也将其捕获为
第1组 - > \ 1 ($|(?:\s*\/00000101\/)|(?:\s*\[I\s+131\]))
----------> (?:\s*\/00000101\/)
- >您使用\ s *即兴创作的另一种模式,以覆盖零个或多个空格。(?:\s*\[I\s+131\])
- >你的另一种模式是即兴的\ s +
这意味着一个或多个空格。 ?:
表示我们不会捕获
它。.*$
- > 。*只是为了匹配后面的任何内容和$
声明字符串的结尾。答案 2 :(得分:0)
您可以在第1组中获得您要查找的值:
^.{3}(.+?)(?=$| ?\[I 131\]| ?\/00000101\/)
<强>解释强>
^
.{3}
(.+?)
(?=
$
|
?
,后跟[I 131] \[I 131\]
|
?
,后跟/ 00000101 / \/00000101\/
如果您的正则表达式引擎支持\K
,您可以尝试这样做,并且您要查找的值不在组中,而是完全匹配: