首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用表达式将X或Y替换为J或Q

用表达式将X或Y替换为J或Q
EN

Stack Overflow用户
提问于 2020-07-23 17:01:55
回答 2查看 42关注 0票数 1

我想知道这是否有可能在一次手术而不是两次?

1.

我用这个表达式来找一个没有空格的支撑:

代码语言:javascript
复制
(?<!\s)\)

我用)代替它

2.

然后,我可以对开头的支撑做类似的操作:

代码语言:javascript
复制
\((?!\s)

这个我用(代替

我是否可以使用OR做一个单一的查找表达式:

代码语言:javascript
复制
((?<!\s)\)|\((?!\s))

用一个替换表达式可以同时做1和2吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-23 17:19:49

您可以使用“旁观者”,既可以向后看,也可以向前看,只需用空格替换即可。

代码语言:javascript
复制
Regex.Replace(text, @"(?<!\s)(?=\))|(?<=\()(?!\s)", " ")

regex演示

详细信息

  • (?<!\s)(?=\)) -一个没有紧跟空格的位置,并且紧跟在)后面。
  • | -或
  • (?<=\()(?!\s) -一个紧跟在(字符前面的位置,而不是紧跟在空格后面的。

C#演示

代码语言:javascript
复制
var input = @"(foobar)  (fo) (ob (ar";
Console.WriteLine( Regex.Replace(input, @"(?<!\s)(?=\))|(?<=\()(?!\s)", " ") );
# => ( foobar )  ( fo ) ( ob ( ar
票数 1
EN

Stack Overflow用户

发布于 2020-07-23 17:17:59

您可以使用(?<!\s)(\))|(\()(?!\s)$2 $1替换。

Regex Demo

详细信息

(?<!\s)(\)):匹配大括号),它前面没有空格作为第一组($1)

|:或

(\()(?!\s):匹配支撑(,后面没有空格作为第二组($2)

替换为$2 $1:一个匹配组将为空,因此它可以创建结果并在适当的位置添加空间

.NET代码示例:

代码语言:javascript
复制
public class Program
{
    public static void Main()
    {
        // This is the input string we are replacing parts from.
        string input = "(foobar)  (fo) (ob (ar";

        // Use Regex.Replace to replace the pattern in the input.
        string output = Regex.Replace(input, @"(?<!\s)(\))|(\()(?!\s)", "$2 $1");

        // Write the output.
        Console.WriteLine(input);
        Console.WriteLine(output);
    }
}

产出:

代码语言:javascript
复制
(foobar)  (fo) (ob (ar
( foobar )  ( fo ) ( ob ( ar
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63059503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档