我需要按点分割数据。我已经逃脱了点(.),我应该忽略。我也应该忽略转义反斜杠(\)。例如,
data1\\.d\\\\\.ata2\\\\.da\.ta3.data4
对于子字符串,应该将此字符串拆分为
data1\\
d\\\\\.ata2\\\\
da\.ta3
data4
我无法为此创建正则表达式。你知道吗,有可能吗?我试着使用以下方法:
(?<!\\((\\\\){2,}))\\. - not working
如果转义斜杠只定义一次,我可以创建以下正则表达式:
"((?<!\\\\)\\.)|((?=([^\\\\]*((\\\\\\\\)+[^\\\\]*)))\\.)";
例如 data1\\.d\.ata2.da\.ta3.data4
正确拆分:
data1\\
d\.ata2
da\.ta3
data4
但我无法检测反斜杠定义甚至多次。你能帮帮我吗?谢谢您!
2条答案
按热度按时间svmlkihl1#
可以使用
查看regex演示。细节:
(?s)
-启用Pattern.DOTALL
标记以便.
可以跨行匹配(?:[^\\.]|\\.)+
-一次或多次出现除\
以及.
,或\
后面跟着任何字符。查看java演示:
xpszyzbs2#
您可以使用此正则表达式获取匹配项:
正则表达式演示
正则表达式演示:
(?=[^.])
:确保前面有非点字符[^.\\]*
:匹配任何非字符的0+.
不是一个\
(?:\\.[^.\\]*)*
:一个非捕获组,它匹配反斜杠,后跟转义字符,并且应该后跟0个或多个非转义字符.
不是一个\
. 匹配此组中的0个或多个(?=\.|$)
:确保前面有一个点或行尾