繁体   English   中英

如何使用re替换和移动python中的字符串模式?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM