使用正则表达式以灵活的方式拆分字符串

时间:2017-11-03 03:12:54

标签: r regex string split

上下文:我需要拆分太长的字符串,并将其用作html表中的列标题。这些字符串是变量名,因此它们中没有任何空格。

如果我让css max-width属性完成这项工作,字符串会在固定的地方拆分,而不是在字符串中使用点或_

例如,假设我有这个字符串:

this.is.a.long.string.indeed.yeah.well.you.know

使用点作为分隔符,我可以用许多不同的方式将它分开。但我提出了这些指导原则:

  1. 所有子字符串必须为12个字符或更少
  2. 分隔符[._]应该在末尾,而不是在子字符串的开头
  3. 子串数必须最少
  4. 如果存在多种解决方案,则首选具有最相似子串长度的解决方案。
  5. 我可以使用R以编程方式执行此操作,但我转向使用正则表达式向导来查看是否可以仅使用正则表达式。

    到目前为止我有什么:

    正则表达式:.{1,12}(_|\b|\Z)

    结果:this.is.a. | long.string. | indeed.yeah. | well.you. | know

    效果很好,除非有一长串字母而没有任何分隔符。请参阅this example on regex101.com

    理想情况下,尽可能使用分隔符,如果序列长度超过12个字符而没有分隔符,则会发生后备分割。

1 个答案:

答案 0 :(得分:3)

你是如此接近,你只需要为没有找到分隔符的情况提供另一种选择:

.{1,12}(_|\b|\Z)|.{1,12}

检查出来:https://regex101.com/r/XrJuYj/2/

编辑:要确保拆分部分包含非分隔字符,您可以使用以下内容:

(?=.{1,12}(.*))(?=.*?[^\W_].*?[\W_].*?\1).{1,12}(?<=_|\b|\Z)|.{1,12}

请参阅:https://regex101.com/r/XrJuYj/3