gpt4 book ai didi

java - 捕获字符串上匹配字符(单个或重复)之间的所有字符

转载 作者:行者123 更新时间:2023-12-01 17:23:17 25 4
gpt4 key购买 nike

我正在尝试提取特定字符之前的字符串(即使字符重复,如下所示(即:下划线“_”):

this_is_my_example_line_0
this_is_my_example_line_1_
this_is_my_example_line_2___
_this_is_my_ _example_line_3_
__this_is_my___example_line_4__

运行我的正则表达式后,我应该得到这个(正则表达式应该忽略字符串中间匹配字符的任何实例):

this_is_my_example_line_0
this_is_my_example_line_1
this_is_my_example_line_2
this_is_my_ _example_line_3
this_is_my___example_line_4

换句话说,我正在尝试“修剪”字符串开头和结尾处的匹配字符。

我正在尝试使用 Java 中的正则表达式来完成此操作,我的想法是捕获行尾或行首的特殊字符之间的字符组。

到目前为止,我只能使用此正则表达式成功完成示例 3:

/[^_]+|_+(.*)[_$]+|_$+/

[^_]+ not 'underscore' once or more
| OR
_+ underscore once or more
(.*) capture all characters
[_$]+ not 'underscore' once or more followed by end of line
|_$+ OR 'underscore' once or more followed by end of line

我刚刚意识到这排除了示例 0,1,2 中消息的第一个单词,因为该字符串不以下划线开头,并且仅在找到下划线后才开始匹配..

是否有更简单的不涉及正则表达式的方法?我并不真正关心第一个字符(虽然它会很好)我​​只需要忽略最后的重复字符..看起来( by this regex tester )只是这样做,会起作用吗? /()_+$/ 空括号匹配行尾单个或重复匹配之前的任何内容..这是正确的吗?

谢谢!

最佳答案

这里有几个选项,您可以替换 ^_+|_+$ 的匹配项使用空字符串,或从 ^_*(.*?)_*$ 的匹配中提取第一个捕获组的内容。请注意,如果您的字符串可能是多行并且您想在每一行上执行替换,那么您将需要使用 Pattern.MULTILINE任一方法的标志。如果您的字符串可能是多行,并且您只想在开头和结尾进行替换,请不要使用 Pattern.MULTILINE但使用Pattern.DOTALL对于第二种方法。

例如:http://regexr.com?355ff

关于java - 捕获字符串上匹配字符(单个或重复)之间的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16988829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com