【问题标题】:I cannot figure out the preplexity with this regex我无法弄清楚这个正则表达式的复杂性
【发布时间】:2015-10-09 15:06:24
【问题描述】:

我以为我是正则表达式专家,但我不明白为什么这不起作用。 我有两个字符串(这些是为示例而编造的,以免泄露实际的个人数据):

Tom Smith 会计 (200),以及 比尔琼斯 (15%) 特别 (310)

所以我想获取员工编号(您可以看到 Bill 在括号中有两个数字)。所以我想得到 200 和 310。我用字符串变量“st”做了一个循环,在两者之间进行迭代:

public class MyMain {
 public static void main(String[] args) {
    String[] str = { "Tom Smith Accounting (200)", "Bill Jones (15%) Special (310)" };

    for (String st : str) {
        String cont = st.replace(".*(", "").replace(").*$", "");
        System.out.println(st + " === " + cont);
    }
 }
}

但是结果和原来输入的一样:

Tom Smith Accounting (200) === Tom Smith Accounting (200)
Bob Jones (15%) Special (310) === Bob Jones (15%) Special (310)

像这样使用替换 String cont = st.replace("(", ""); 只需去掉括号即可:

Tom Smith Accounting (200) === Tom Smith Accounting 200)
Bill Jones (15%) Special (310) === Bill Jones 15%) Special 310)

就像 String cont = st.replace(")", "");

Tom Smith Accounting (200) === Tom Smith Accounting (200
Bill Jones (15%) Special (310) === Bill Jones (15% Special (310

如果我在 linux 的 ksh 中执行此操作(echo | sed 's/.../...' 它会起作用,那么我在这里做错了什么?replaceFirst() 也不起作用(给出一个未闭合的组错误)。

有人看到错误吗?是否有其他方法可以从括号之间选择一个数字(例如 C 中的 sscanf())?

【问题讨论】:

  • replace 不接受正则表达式。 replaceAll 会。
  • 你正试图用铅笔挖一口井!。你会破坏 tip,一切都会崩溃。不要使用正则表达式进行 解析(看起来像 部署代码
  • 哦,是的,我确实尝试过逃避它们。 (在java中你必须使用double,比如"\(" like st.replace(".*\(", "").replace("\).*$", "")

标签: java regex eclipse


【解决方案1】:

第一个错误:你使用 replace 而不是 replaceAll(replace 不使用 Regex)

第二个错误:您没有转义 () 字符。

第三个错误:您的第一个正则表达式缺少一个 ^ 来表示该行的开始。

第四个错误:你应该使用[^(]而不是.,所以它不匹配左括号。

【讨论】:

  • 谢谢。我确实在上面添加了一条评论,我试图逃避它们,但我想我是在你发表评论之后但在我看到它之前输入的。但就像你说的,我会尝试 replaceAll()
  • 好的,是的,那一定是在我开始写作之后。无论如何我都会把它留在里面,因为它不是问题。如果对你有帮助,请采纳答案。
  • 我还是新手。我点击了答案旁边的向上三角形。我想我也需要做点别的。
  • @Tony 您应该看到要接受任何答案的信息,您需要等到您的问题至少出现 15 分钟。你现在可以再试一次。
  • 哦,关于 #4 我确实希望它匹配“(”,因为其中一个示例在员工编号前有一个“(15%)”。我确实想过制作两种方法,一种是“notGreedy()”附加到方法名称的末尾。哦,是的,我的一个试验确实有“^”;-)
猜你喜欢
  • 2013-02-14
  • 2021-05-18
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多