正则表达式替换文本以标记以字符开头的HTML标签

huangapple go评论60阅读模式
英文:

Regex replace text to tag html starts with character

问题

output:

需要将文本转换为HTML标记,如下所示:

input: p1: Question 1

output: <h3>Question 1</h3>

或者也可以这样:

input: question 1: ¿question 1?

output: <h3>¿question 1?</h3>

我不明白的细节是,我有以下的正则表达式规则。

([a-zA-Z])([1-9])(:)+(.*)?

我的结果是:

<h3> Question 1</h3>
question 1: ¿question 1?

  • 在第一个示例中,我需要移除生成的空格,即在&lt;h3&gt;Q之间的空格。
  • 在第二个示例中,它根本不起作用。

你能帮助我找出正则表达式规则中的问题吗?

DEMO

英文:

I need to bring a text to html tag, like this:

input: p1: Question 1

output: &lt;h3&gt;Question 1&lt;/h3&gt;

or also

input: question 1: &#191;question 1?

output: &lt;h3&gt;&#191;question 1?&lt;/h3&gt;

The detail that I don't get it, I have the following Regex rule.

([a-zA-Z])([1-9])(:)+(.*)?

and my result is:

&lt;h3&gt; Question 1&lt;/h3&gt;
question 1: &#191;question 1?
  • In the first one I need to remove the space that is generated between &lt;h3&gt; and the Q
  • In the second it doesn't work for me at all

Could you help me in what I am failing in the regex rule?

DEMO

答案1

得分: 2

你可以使用一个捕获组,并使用\h*匹配可选的水平空白字符。

在捕获组中,使用\S至少匹配一个非空白字符。

[a-zA-Z]+\h*[1-9]:\h*(\S.*)

正则表达式演示

在替换中使用第一个捕获组的值:

&lt;h3&gt;$1&lt;/h3&gt;
英文:

You can use a single capture group, and match optional horizontal whitespace chars with \h*

In the capture group, match at least a single non whitespace char with \S

[a-zA-Z]+\h*[1-9]:\h*(\S.*)

Regex demo

In the replacement use the value of group 1:

&lt;h3&gt;$1&lt;/h3&gt;

答案2

得分: 0

正则表达式需要匹配问题编号之前的可选空格(以解决第二个问题),以及冒号之后的可选空格(以解决第一个问题)。

([a-zA-Z]+)\s*([1-9])(:)+\s*(.*)

演示

(.*)后面不需要?。因为.*可以匹配零长度的字符串,所以不需要将其标记为可选的。

我不太确定为什么在(:)后面有+ —— 你真的想允许类似Question 1:::::这样的情况吗?

英文:

The regexp needs to match optional whitespace before the question number (to fix the second problem) and after the : (to fix the first problem).

([a-zA-Z]+)\s*([1-9])(:)+\s*(.*)

DEMO

There's no need for ? after (.*). Since .* matches a zero-length string, you don't need to mark it as optional.

I'm not really sure why you have + after (:) -- do you really want to allow something like Question 1:::::?

答案3

得分: 0

The answer was, thanks to the user @User863

([a-zA-Z ])+([1-9])(:)+\s*(.*)

英文:

The answer was, thanks to the user @User863

([a-zA-Z ])+([1-9])(:)+\s*(.*)

huangapple
  • 本文由 发表于 2023年7月28日 00:41:43
  • 转载请务必保留本文链接:https://go.coder-hub.com/76781841.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定