【问题标题】:Regular Expression ignore characters in between two characters on different lines正则表达式忽略不同行上两个字符之间的字符
【发布时间】:2013-01-16 19:48:17
【问题描述】:

您好,我正在尝试获取一些值,跳过该行的其余值,然后获取下一行,但前提是它是特定模式。所以我的数据就像

($ Amount)Tj 1 0 0 1 18.4 369.8 Tm
 (12/30)Tj 1 0 0 1 84.7 369.8 Tm
 (CLUBZONE.COM TICKETS USA VANCOUVER BC)Tj 1 0 0 1 449.5 369.8 Tm
 (-165.00)Tj 1 0 0 1 18.4 356.8 Tm
 (01/05)Tj 1 0 0 1 84.7 356.8 Tm

我想抢(12/30)(CLUBZONE.COM TICKETS USA VANCOUVER BC)(-165.00)

我应该匹配日期,然后是换行符之前的所有内容,下一行的下一步?我现在想省略括号外的东西我只有这个

[\(][0-1][1-9]/[1-3][0-9][\)] 

*请注意,每个 Tm 之后的数据都以新行的形式出现

【问题讨论】:

  • 这是 Java 还是 .net?您应该选择一个以获得明确的答案。
  • err 我还没有真正选择一个。我会做,但我宁愿 .NET
  • 你想只检索每一行第一个括号中的值吗?
  • 在您的情况下,从Tj 之前的第二个字符到倒数第二个字符的每一行都更容易获取。

标签: java .net regex


【解决方案1】:

我在 RegexBuddy 中为 PCRE 构建了这个正则表达式,带有点匹配换行符:

^.*?(\(\d{1,2}/\d{1,2}\)).*?(\(.*?\)).*?(\(-?\d+\.\d{2}\)).*$

那么替换为:

$1$2$3

【讨论】:

    【解决方案2】:

    (?<value>\(.*\)) 匹配您的示例。这里是C#中对应的代码

    private IList<string> GetValues(string input)
    {
        const string pattern = @"(?<value>\(.*\))";
        var regex = new Regex(pattern);
        var values = new List<string>();
    
        foreach (Match match in regex.Matches(input))
        {
            values.Add(match.Groups["value"].Value.ToString());
        }
    
        return values;
    }
    

    【讨论】:

    • 谢谢,很有帮助
    【解决方案3】:
    (\([0-1][1-9]/[1-3][0-9]\))(?:Tj[\d\s\.]*Tm)\s*(\(.*\))(?:Tj[\d\s\.]*Tm)\s*(\([-\d\.]*\))
    

    又快又脏,只在 Visual REGEXP 中测试过,但这应该能得到你想要的,在匹配 1 到 3 中。

    【讨论】:

    • 哇,非常感谢!然后删除括号外的东西我认为应该很容易?
    • 哦,我认为 josh 在下面有它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2018-05-14
    • 2015-10-04
    • 2014-03-04
    • 1970-01-01
    相关资源
    最近更新 更多