pyspark正则表达式匹配域\用户名模式

时间:2019-09-17 18:54:31

标签: regex pyspark

我在数组中有一个域\用户名的字符串。我要匹配并替换它。

该字符串具有以下模式:

[, 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'
    )
)

我无法正确匹配模式。我想匹配字符串并替换它。请提出建议。

1 个答案:

答案 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

Regex demo