【发布时间】:2019-04-02 23:31:12
【问题描述】:
别担心,我不是要你帮我找一个正则表达式!
我目前正在使用该方法
String.replaceAll(String regex, String replacement)
解析一行用户提供的数据并获取用户名。我这样做的方法是剥离除我需要的数据之外的所有内容,然后返回该数据。
让我们假装
String rawTextInput = "Machine# 000111
Password: omg333444"
我希望用户名是机器号。我的方法:
private String getUsername(String rawTextInput) {
String username = rawTextInput.replaceAll("(.+#\\s\\d{6,6})", "(\\d{6,6})");
return username;
}
第一个参数 regex (.+#\s\d{6,6}) 正确识别原始输入的第一行 Machine# 000111。
第二个参数/正则表达式(\d{6,6})正确地隔离了我想要的数据,000111。
基本上,此方法告诉程序要做的是“找到带有 Machine# 000111 的行并将该行剥离到 000111。
实际输出
但是,我显然错误地使用了 ReplaceAll() 的第二个参数,因为我得到的是文字正则表达式
username = "(\\d{6,6})"
预期输出
而不是
username = "omg333444"
在这里获取用户名的正确方法是什么?有没有办法在 ReplaceAll() 的 Replacement 参数中模拟正则表达式的存在?
请注意,此示例中的代码块具有重复的“\”字符,因为它们是 IntelliJ IDEA 中的转义字符。
【问题讨论】:
-
.replaceAll("(?s).*#\\s(\\d{6}).*", "$1")? -
您可以使用 group 来获取对匹配字符串的反向引用。 [这篇文章包含示例和解释。 ][1] : stackoverflow.com/questions/36267354/…
标签: java regex string replace replaceall