我在数组中有一个域\用户名的字符串。我要匹配并替换它。
该字符串具有以下模式:
[, DESKTOP-XXQYY56\Adminaccount, ] [, MB4345XX\adminaccount, ]
我正在使用的代码如下:
df2= df1.withColumn(
'str1',
regexp_replace(
'str',
r'^([A-Za-z0-9]+(-[A-Za-z0-9]+)*)+(\\?([A-Za-z0-9])+)*',
'AB22'
)
)
我无法正确匹配模式。我想匹配字符串并替换它。请提出建议。
答案 0 :(得分:0)
如果要匹配该格式并将domain\user
替换为XXXX,则可以使用2个捕获组来打开[,
和关闭, ]
您可以省略锚点^
,在这一部分([A-Za-z0-9])+
中将量词+
移到字符类[A-Za-z0-9]+
上,否则您将重复匹配单个字符的组
如果您不单独使用捕获组进行进一步处理,则可以将它们变成非捕获组(?:
图案可能看起来像
(\[, )[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*(?:\\?[A-Za-z0-9]+)*(, \])
部分
(\[, )
捕获第1组匹配项[,
[A-Za-z0-9]+
匹配角色类中列出的任何内容1次以上(?:
非捕获组
-[A-Za-z0-9]+
匹配-
并匹配任何列出的1次以上)*
关闭非捕获组并重复0次以上(?:
非捕获组
\\?[A-Za-z0-9]+
与可选\
匹配,且匹配任意列出的列表1倍以上)*
关闭非捕获组并重复1次以上(, \])
捕获第2组匹配项, ]
在替换中,使用2个捕获组
$1XXXX$2