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

2024-06-28 11:30:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个片段

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

但现在我

^{pr2}$

我正在尝试将scala代码转换为python。 scala代码是

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/


Tags: 代码rehttpfoo代码段barvalout
1条回答
网友
1楼 · 发布于 2024-06-28 11:30:02

我不知道scala,所以我不知道\p{LD}+应该匹配什么,但是使用\w来匹配[a-zA-Z0-9_](foo/bar),regexp是可以的:

>>> 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在评论中建议的那样,您可以使用简单的引号来去掉三重引号:

^{pr2}$

此外,\p{L}不是Scala特有的(Amal Murali的功劳),而是用于匹配属于"letter" category的unicode字符。在

相关问题 更多 >