R中的高级字符串处理 - 正则表达式,“”。format()& re.VERBOSE

时间:2012-07-10 21:23:58

标签: regex r python-2.7

Python是一种用于处理字符串的神奇语言。我已经创建了一些相当高级的正则表达式,我正在考虑移植到R.R最近添加了perl(?P)功能,但我不确定如何最好地在R中执行以下示例:

import re

pill_unit = r"(?:PILL|CAPSULE)"
dosage = r"""
(?P<pills>
  ½|
  \d+(?:\.\d+|)|
  \bONE\b)\s*
{unit}""".format(unit = pill_unit)
compiled_regex = re.compile(dosage, re.VERBOSE)

print(compiled_regex.search("1 PILL A DAY").group("pills"))
与.format()相比,sprintf()似乎很笨拙,我可以在其中命名我的参数并知道它们最终会出现在正确的位置。

1 个答案:

答案 0 :(得分:0)

我编写了一个测试程序,将正则表达式格式化为可读代码。它还进行分组分析,平衡和许多其他事情。其他引擎的特殊处理标志。以格式化的方式看到非常大的表达式真的很独特。

实施例

在这些上,组处理标志被打开

(?P<pills>
  ½|
  \d+(?:\.\d+|)|
  \bONE\b)\s*
(?:PILL|CAPSULE)

进入

1    (?P<pills>
          ½
       |  
          \d+
          (?: \.\d+ | )
       |  
          \bONE\b
1    )
     \s*
     (?: PILL | CAPSULE )

然后进入

(?P<pills>½|\d+(?:\.\d+|)|\bONE\b)\s*(?:PILL|CAPSULE)

然后这个

1    (?P<pills>
          ½
       |  \d+
          (?: \.\d+ | )
       |  \bONE\b
1    )
     \s*
     (?: PILL | CAPSULE )