【问题标题】:Notepad++ REGEX Masking / Sanitise DataNotepad++ 正则表达式屏蔽/清理数据
【发布时间】:2019-04-09 00:39:36
【问题描述】:

需要对生产文件进行清理,然后将其移交给第三方。完整性/字符数/位数应保持不变。

<ADD1<4, Privet Drive, Scotland, EC12 5FL, UK<

在上面的例子中,我们需要用 9 来屏蔽数字,用 X 或 x 来屏蔽字符(根据大小写)。

目标数据应该是。

<ADD1<9, Xxxxxx Xxxxx, Xxxxxxxx, XX99 9XX, XX<

【问题讨论】:

  • 好像,上面帖子中的示例已被自动删除,因为它是一个地址,带有数字、字符、空格和标点符号
  • 地址被解释为(损坏的)HTML,因此未呈现。我通过将其更改为代码来修复它。
  • NP++ 支持条件替换(如果它是使用 boost:: 的那个)。使用它,它是一个单一的正则表达式和替换。

标签: regex notepad++ sanitization masking


【解决方案1】:

NP++ 应该使用boost::regex 引擎。
此外,它显然使用了增强扩展的替换格式字符串。

这意味着您可以在替换字符串中放置一个条件来测试
哪个组匹配,然后相应地替换。

语法:(?1yes:no) 表示第 1 组匹配,匹配,否则不匹配
语法:(?{1}yes:no)相同

如果它有 boost::regex 使用

更新

   only between <ADD1< and  <  

找到(?:(?!^)\G|&lt;ADD1&lt;)[^a-zA-Z0-9&lt;]*\K(?:([A-Z])|([a-z])|\d)
替换(?1X:(?2x:9))

注意 - 选择替换字符串格式为 Boost Extended
如果它不是默认值。

https://regex101.com/r/pJCsZa/1

正则表达式信息

 (?:
      (?! ^ )
      \G                            # Start match where last left off
   |                              # or,
      <ADD1<                        # New start
 )
 [^a-zA-Z0-9<]*                # Optional non-letter or digit or <
 \K                            # Ignore matched characters up to here

 (?:                           # What's left, a letter or a digit
      ( [A-Z] )                     # (1)
   |  ( [a-z] )                     # (2)
   |  \d 
 )

【讨论】:

  • 谢谢@sln。这确实很有用,但是如何限制 之间的搜索和替换
  • 哦,我也会使用\G 构造。你知道怎么做吗?
  • 谢谢,太棒了。但是,它将所有 A-Z 更改为 X,所有数字更改为 9,包括 ADD1 以及 及其周围的所有内容
  • 我刚刚将搜索更改为 。但是,我应该在 Replace 中添加什么?
  • 找到 (?:(?!^)\G|
【解决方案2】:

您应该可以在此处进行一系列替换。通过在正则表达式模式下搜索进行每次替换,然后使用适当的替换:

[A-Z] -> replace with X
[a-z] -> replace with x
[0-9] -> replace with 9

我建议突出显示整个地址文本,然后进行替换。

【讨论】:

  • 谢谢,但是它将如何替换为确切数量的 X。请帮忙提供语法。
  • @PrabhatSCauhan 我的正则表达式一次替换一个字符。
猜你喜欢
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多