Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regex with replace in Golang

Tags:

regex

go

I've used regexp package to replace bellow text

{% macro products_list(products) %} {% for product in products %} productsList {% endfor %} {% endmacro %} 

but I could not replace "products" without replace another words like "products_list" and Golang has no a func like re.ReplaceAllStringSubmatch to do replace with submatch (there's just FindAllStringSubmatch). I've used re.ReplaceAllString to replace "products" with .

{% macro ._list(.) %} {% for product in . %} .List {% endfor %} {% endmacro %} 

It's not sth which I want and I need below result:

{% macro products_list (.) %} {% for product in . %} productsList {% endfor %} {% endmacro %} 
like image 501
coditori Avatar asked May 17 '16 11:05

coditori


People also ask

How to replace using regex in Golang?

In Go regexp, you are allowed to replace original string with another string if the specified string matches with the specified regular expression with the help of ReplaceAllString() method. In this method, $ sign means interpreted as in Expand like $1 indicates the text of the first submatch.

How does regex replace work?

The REGEXREPLACE( ) function uses a regular expression to find matching patterns in data, and replaces any matching values with a new string. standardizes spacing in character data by replacing one or more spaces between text characters with a single space.

How do I remove special characters from a string in Golang?

The strings package of Golang has a Replace() function which we can use to replace some characters in a string with a new value. It replaces only a specified "n" occurrences of the substring.


1 Answers

You can use capturing groups with alternations matching either string boundaries or a character not _ (still using a word boundary):

var re = regexp.MustCompile(`(^|[^_])\bproducts\b([^_]|$)`) s := re.ReplaceAllString(sample, `$1.$2`) 

Here is the Go demo and a regex demo.

Notes on the pattern:

  • (^|[^_]) - match string start (^) or a character other than _
  • \bproducts\b - a whole word "products"
  • ([^_]|$) - either a non-_ or the end of string.

In the replacement pattern, we use backreferences to restore the characters captured with the parentheses (capturing groups).

like image 111
Wiktor Stribiżew Avatar answered Sep 24 '22 08:09

Wiktor Stribiżew