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()似乎很笨拙,我可以在其中命名我的参数并知道它们最终会出现在正确的位置。
答案 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 )