Java 要排除匹配的第一个和最后一个字符的正则表达式
我有以下字符串: 单词2单词3单词4 我的意图是只提取“test2”。使用Java 要排除匹配的第一个和最后一个字符的正则表达式,java,regex,regex-negation,Java,Regex,Regex Negation,我有以下字符串: 单词2单词3单词4 我的意图是只提取“test2”。使用\uw*?\uu作为字符串匹配,我可以将“word2”作为匹配项,但我看不到删除这些下划线以仅匹配“word2”的方法 我不能使用.split()或类似的东西,必须仅使用正则表达式收集此值 你建议大家做些什么修改?你的问题并不完全清楚,但假设word2、word3等都是不包含\uu的任意单词,你可以使用捕获组来提取要提取的字符子集。例如: \w*_(\w*)_\w*_\w* 匹配字符串,第一个(也是唯一的)捕获组提取第二
\uw*?\uu
作为字符串匹配,我可以将“word2”作为匹配项,但我看不到删除这些下划线以仅匹配“word2”的方法
我不能使用.split()或类似的东西,必须仅使用正则表达式收集此值
你建议大家做些什么修改?你的问题并不完全清楚,但假设
word2
、word3
等都是不包含\uu
的任意单词,你可以使用捕获组来提取要提取的字符子集。例如:
\w*_(\w*)_\w*_\w*
匹配字符串,第一个(也是唯一的)捕获组提取第二个单词。也许
*
应该是+
,这取决于您是否要接受零大小的单词。如果您不担心性能,那么一种快速而肮脏的方法就是删除匹配的第一个和最后一个字符 您还可以使用正向向前看和向后看
(?为什么不使用String.split(“”)[1]?不能使用String.split(“”)[1]因为它将由客户端解释,并且必须是可配置的。从这个问题来看,我假设您需要第二个单词。您需要对split
代码进行哪些更改,而不需要使用Regex进行编码?Hello@BeeOnRope,谢谢您的建议。不幸的是,如果我使用您的Regex,它将匹配所有字符串。我只需要不带下划线的“word2”。您对其进行了任何修改吗?您所说的“想要”是什么意思?上面的代码匹配整个字符串,但在查询第一个匹配的组(部分(\w*)
)时,只提供word2
)。如果你关心匹配,你可以结合使用lookahead和lookahead。我使用了,应用了这个正则表达式和word1\u word2\u word3\u word4字符串,它匹配所有这些,而不仅仅是word2。这无法完成,因为客户端必须能够以他们想要的方式配置它。这是一个我只需要匹配的字符串。工作方式如下魅力!谢谢!:):)为什么你的正则表达式中有2
。如果输入是abc\u foo\u pqr\u bar
,用户要求将文本与所附2
匹配(test2
)。如果案例是abc\u foo\u pqr\u bar
,那么将没有匹配项。。。