<html> <head> <title>Regex Find and Replace in IntelliJ</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" type="text/css" href="/static/app.css"> <link rel="alternate" type="application/atom+xml" href="/atom.xml"> </head> <body> <header class="site-header"> <div class="wrapper"> <a class="site-title" href="/">Adam Neumann's blog</a> <nav class="site-nav"> <input type="checkbox" id="nav-trigger" class="nav-trigger" /> <label for="nav-trigger"> <span class="menu-icon"> <svg viewBox="0 0 18 15" width="18px" height="15px"> <path d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.032C17.335,0,18,0.665,18,1.484L18,1.484z M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.032C17.335,6.031,18,6.696,18,7.516L18,7.516z M18,13.516C18,14.335,17.335,15,16.516,15H1.484 C0.665,15,0,14.335,0,13.516l0,0c0-0.82,0.665-1.483,1.484-1.483h15.032C17.335,12.031,18,12.695,18,13.516L18,13.516z"/> </svg> </span> </label> <div class="trigger"> <a class="page-link" href="/pages/about.html">About</a> <a class="page-link" href="/pages/resources.html">Resources</a> </div> </nav> </div> </header> <main class="page-content"> <div class="wrapper"> <article class="post"> <header class="post-header"> <h1 class="post-title">Regex Find and Replace in IntelliJ</h1> <p class="post-meta"> <span>Jul 15, 2017</span> </p> </header> <div class="post-content"> <p>The other day I was preparing a CSV file for load into a PostgreSQL database. The source file contained a datetime column in an unusual format (<code>'15JUL2017:00:00:00'</code>), which needed to be transformed to a compatible format (<code>'15-JUL-2017:00:00:00'</code>) before loading with the <code>\copy</code> CLI command. Values representing many different days, months, and years were present in the thousands.</p> <p><img src="/assets/intellij-regex/csv.png" alt="CSV Data" /></p> <p>My usual IntelliJ tricks did not work. The file was large (4000 lines), which meant batch editing with multiple carets by matching all occurrences would have been too slow.<br /> The pattern itself was easily findable by a regex (2 numeric characters, 3 non-numeric characters, 4 numeric characters), but the replacement string depends on the groups matched.</p> <p>Turns out IntelliJ has a feature to deal with this. In the replacement string, you can simply reference the match group via <code>$X</code> (where <code>X</code> is the group number, starting at 1).</p> <p><img src="/assets/intellij-regex/solution.png" alt="Regex Find and Replace" /></p> <p>In the end, a search regex of <code>(\d{2})(\D{3})(\d{4})</code> and a replacement string of <code>$0-$1-$2</code> can be used. IntelliJ is full of useful features. Hopefully this will come in handy for you one day.</p> </div> </article> </div> </main> <footer class="site-footer"> <div class="wrapper"> <div class="footer-col-wrapper"> <div class="footer-col one-half"> <h2 class="footer-heading">Adam Neumann's blog</h2> <ul class="contact-list"> <li class="p-name">Adam Neumann</li> <li><a class="u-email" href="mailto:blog@noizwaves.com">blog@noizwaves.com</a></li> </ul> </div> <div class="footer-col one-half"> <p>Technical blog of Adam Neumann. Engineer at Gusto in Boulder, CO. </p> </div> </div> <div class="footer-col-wrapper"> <div class="social-links"> <ul class="social-media-list"> <li> <a href="https://github.com/noizwaves"> <span class="username">Github</span> </a> </li> <li> <a href="https://www.twitter.com/noizwaves"> <span class="username">Twitter</span> </a> </li> </ul> </div> </div> </div> </footer> </body> </html>