【问题标题】:Regular expression for && and &&& 和 & 的正则表达式
【发布时间】:2013-09-16 06:20:25
【问题描述】:

你能建议我只匹配字符串中的'&'而不匹配'&&'的正则表达式吗?

例如输入字符串

s1 = "STRING1 && STRING2 & STRING3 AND STRING4";

我正在用函数拆分输入字符串 -

String[] param = s1.split('&'); or s1.split('&(?!&&)');

拆分后的结果应该是 -

param[1] = STRING1 && STRING2  
param[2] = STRING3 AND STRING4

感谢您的回复。

开发

【问题讨论】:

  • 请说明并标记您在问题中使用的语言。
  • 自从NSRegularExpression,我期待iOS平台。
  • 抱歉标签错误,但图片中没有 iOS 内容。

标签: regex string split stringtokenizer


【解决方案1】:

您可以在此处的正则表达式中使用lookaround

(?<!&)&(?!&)

上面的正则表达式匹配一个&amp;,既不在另一个&amp;之前也不在其后。

【讨论】:

  • 除此之外,我还有一个疑问,如果输入字符串为 ---> STRING1 &&&STRING2 & STRING3 在这种情况下,这个正则表达式在我的站点上失败了。你能帮帮我吗?
  • @Devendraw,对我来说效果很好。字符串在&amp; 处拆分为STRING1 &amp;&amp;&amp; STRING2 | STRING3
  • 输入字符串 - STRING1 &&& STRING2 | STRING3 应拆分为 1。 String1 && 2.String2 | String3 它不起作用,因为它从 &&& 选择哪个 '&' 来拆分?我希望第三个 & 用于拆分。您还有其他正则表达式建议吗?
  • 知道了 - 正则表达式应该是 - ((?
  • @Devendraw,我的意思是输入 STRING1 &amp;&amp;&amp; STRING2 &amp; STRING3 将被拆分为 (1) STRING1 &amp;&amp;&amp; STRING2 和 (2) `STRING3. (The |` 仅用于显示不同的部分。)我假设&amp;&amp;&amp; 是您数据的一部分,而不是拆分的运算符。我不确定您在此处解析的具体内容是什么,因此目前无法推荐更好的正则表达式。
【解决方案2】:

你也可以使用这个模式:

[^&]&[^&]

调用某些特定于语言的SPLIT 函数应该可以完成这项工作。

如果这是针对 iOS 平台的,请在单独的应用中尝试此示例:

NSString *string = @"STRING1 && STRING2 & STRING3 AND STRING4"; //[NSString stringWithFormat:@"%@", @""];

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^&]&[^&]"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];

NSUInteger numberOfMatches = [regex numberOfMatchesInString:string
                                                    options:0
                                                      range:NSMakeRange(0, [string length])];
NSLog(@"numberOfMatches : %d", numberOfMatches);
NSArray *matches = [regex matchesInString:string
                                  options:0
                                    range:NSMakeRange(0, [string length])];

for (NSTextCheckingResult *match in matches) // adjust loop per your criteria
{
    NSRange matchRange = [match range];

    // Pick the separator
    NSLog(@"::::%@", [string substringWithRange:matchRange]);

    // Splitted string array
    NSArray *arr = [string componentsSeparatedByString:[string substringWithRange:matchRange]];

    NSLog(@"Splitted String : %@", arr);
}

【讨论】:

    【解决方案3】:

    它可能并不优雅,但我会将孤立的 & 替换为其他东西,然后我会进行拆分。

    类似这样的东西(伪代码,不是 IOS 语法):

    // s1 = "STRING1 && STRING2 & STRING3 AND STRING4";
    aux=s1.replaceAll("([^&])&([^&])","$1 _SEPARATOR_ $2");
    // in case of & at the beginning
    aux=aux.replaceAll("^&([^&])"," _SEPARATOR_ $2");
    // in case of & at the end
    aux=aux.replaceAll("([^&])&$","$1 _SEPARATOR_ ");
    
    // now aux="STRING1 && STRING2  _SEPARATOR_  STRING3 AND STRING4";
    String[] params=aux.split(" _SEPARATOR_ ");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多