【问题标题】:Capitalizing the first letter after a tag标记后的第一个字母大写
【发布时间】:2015-03-14 00:53:37
【问题描述】:

我正在尝试想出一种搜索和替换方法来将标记后的第一个字母大写,但我没有运气。

我正在使用Notepad++的正则表达式模式。

【问题讨论】:

  • 编辑:我已经搜索了网站上提供的答案,它们要么 (a) 没有帮助,要么 (b) 与我的问题无关。
  • 你可以暴力破解它。将“

    a”替换为“

    A”等等。

  • 你看到这个了吗? stackoverflow.com/questions/1039226/…
  • @shawnt00 我也尝试过使用蛮力,但也没有用。我看到了那个帖子,但是那个人用来匹配他们的文字的表达方式对我不起作用。
  • 您可能在使用尖括号时遇到了问题,因为您仍然选择了正则表达式。

标签: regex capitalization


【解决方案1】:

在 Notepad++ 中,在查找和替换对话框中启用正则表达式模式,然后查找:

(?<=<p>)(.)

并替换为:

\U\1

解释要匹配的模式:

(?<=a)b   # A positive lookbehind, i.e. match all b that immediately follow a, but
          #   don't match the "a" itself.
(.)       # Find any character (i.e. "."), and capture it.
(?<=a)(.) # Find any character that immediately follows a, and capture it.

以及替换:

\1   # The first captured substring in each match.
\Ux  # Convert x to upper case.
\U\1 # Convert the first captured substring in each match to upper case.

请注意,这会尝试将第一个 字符 转换为大写。如果&lt;p&gt; 和您想要大写的字母之间可能有其他非字母字符,您可以使用以下模式:

(?<=<p>)([^A-Za-z]*)(.) 

# [^x]       Matches any character that is not x.
# [^A-Za-z]  Matches any character that is not one of the upper case 
#              or lower case letters.
# x*         Matches zero or more consecutive x.
# [^A-Za-z]* Matches zero or more consecutive characters that are not
#              upper case or lower case letters.

并替换为

\1\U\2 # The first captured substring (any non-letter characters
       #   that immediately follow <p>) followed by the second captured
       #   substring (the first letter that appears after <p>), which 
       #   is converted to upper case.

要找到的模式说:“匹配(并在捕获组 1 中捕获)紧跟在 &lt;p&gt; 之后的任何非字母字符,然后匹配(并在捕获组 2 中捕获)紧随其后的第一个字符跟随非字母字符(当然,它必须是我们要确保是大写的字母)”。请注意,因为我们使用*,所以当&lt;p&gt; 后面没有非字母字符时也会产生匹配,在这种情况下,捕获组一将只包含一个空字符串。

【讨论】:

  • 非常感谢您的解决方案和解释。老实说,我为此失去了头发!非常感谢!
  • @jbaum 我错过了什么吗?为什么需要回顾?
  • 我明白了。它本身并不是必需的,它只是让更换更容易。
  • @shawnt00 - 你说得对,这不是必需的,例如找到&lt;p&gt;([^A-Za-z]*)(.) 并替换为 &lt;p&gt;\1\U\2 也可以。好点子。
  • 我没有更改每个标签值的内容,而是尝试将标签的第一个字母像 )(.) 更改为 (?
【解决方案2】:
/<p>\s*(.){1}/

这将匹配 &lt;p&gt; 标记,后跟任意类型的空格零次或多次,后跟任意字符 1 次,它会记住第 1 个字符,以便您以后可以使用它将其转换为大写。

【讨论】:

  • 嗯,所以我尝试使用它来匹配我的文本,但它不起作用。它与我的文字不匹配。
  • 这是我的示例文本

    我的狗昨天死了

    我可以使用这个^

    进行匹配。但是,给我带来问题的是替代品。也许我只是输入错误的答案?

  • 也许我做错了,但这根本不匹配(查找)。我已在搜索/替换功能的“查找内容”部分输入了此答案,但无法找到“文本”。
  • @eams 好的,显然 notepad++ 在正则表达式方面与 javascript 相比做了一些不同的事情。对不起,我没有考虑过。知道我上面的正则表达式的总体思路是合理的,它应该可以工作,只要它是以 n++ 理解的方式编写的。看这里,可能对你有帮助letconex.blogspot.gr/2013/06/…
  • @Mitch 感谢您的链接。我认为我真正的问题是不知道如何正确地将表达式串在一起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 2018-07-08
  • 2016-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多