[英]How to replace and shift the string pattern in python using re?
我有一个片段
re.sub(r"""\s*(\p{LD}+)\s+NEAR/(\d)\s+(\p{LD}+)\s*""",r""""$1 $3"~$2""",'foo NEAR/4 bar')
在python中。
预期输出为
“ foo bar”〜4
但现在我越来越
foo NEAR/4 bar
我正在尝试将scala代码转换为python。 标量代码是
val near_rex = """\s*(\p{LD}+)\s+NEAR/(\d)\s+(\p{LD}+)\s*""".r;
val out = near_rex.replaceAllIn("foo NEAR/4 bar", """"$1 $3"~$2""");
斯卡拉(Scala)片段在这里工作正常http://www.simplyscala.com/
我不知道scala,所以我不知道\\p{LD}+
应该匹配什么,但是使用\\w
匹配[a-zA-Z0-9_]
(foo / bar),正则表达式可以:
>>> re.sub(r"""\s*(\w+)\s+NEAR/(\d)\s+(\w+)\s*""",r""""\1 \3"~\2""",'foo NEAR/4 bar')
'"foo bar"~4'
为了返回捕获的组,您必须使用\\1
, \\2
...而不是$1
。
正如Avinash Raj在评论中所建议的那样,您可以使用简单的引号来消除三重引号:
re.sub(r'\s*(\w+)\s+NEAR/(\d)\s+(\w+)\s*',r'"\1 \3"~\2','foo NEAR/4 bar')
此外, \\p{L}
不是特定于Scala的(归功于Amal Murali),但用于匹配属于“字母”类别的unicode字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.