gpt4 book ai didi

c# - 用于在匹配引号之间选择数据的正则表达式模式

转载 作者:太空狗 更新时间:2023-10-29 22:05:36 24 4
gpt4 key购买 nike

假设我有以下字符串,我想对其运行正则表达式:

This is a test string with "quotation-marks" within it.
The "problem" I am having, per-se, is "knowing" which "quotation-marks"
go with which words.

现在,假设我想将所有- 字符引号之间 替换为一个空格。我在想我可以使用如下所示的正则表达式来做到这一点:

Find What:      (\"[^"]*?)(\-)([^"]*?\")
Replace With: $1 $3

我遇到的问题是,使用此模式时,它不会考虑引号是打开还是关闭语句。

因此,在上面的示例中,per-se 中的 - 字符将被空格替换,因为它位于 2 个引号之间,但位于 结束标记和开始标记 - 当我特别想查看开始标记和结束标记之间的文本时。

你如何在这样的正则表达式中解释这一点?

我希望这是有道理的。

我正在使用 VB/C# 正则表达式。


只是为了完成这个问题(并希望在必要时详细说明),我希望得到的最终结果是:

This is a test string with "quotation marks" within it.
The "problem" I am having, per-se, is "knowing" which "quotation marks"
go with which words.

谢谢!!

最佳答案

您遇到的问题与试图匹配 HTML 或左括号和右括号的人有同样的问题,正则表达式只能匹配常规语言并且知道哪个 " 是结束语和开场语除了琐碎的案例,它的范围还很广。

编辑:如 Vasili Syrakis 的回答所示,有时可以做到,但正则表达式是此类问题的脆弱解决方案。

话虽如此,您可以在普通情况下转换您的问题。由于您使用的是 .NET,因此您可以简单地匹配每个带引号的字符串并使用 the overload that takes a match evaluator .

Regex.Replace(text, "\".*?\"", m => m.Value.Replace("-", " "))

测试:

var text = @"This is a test string with ""quotation-marks"" within it.
The ""problem"" I am having, per-se, is ""knowing"" which ""quotation-marks""
go with which words.";

Console.Write(Regex.Replace(text, "\".*?\"", m => m.Value.Replace("-", " ")));
//This is a test string with "quotation marks" within it.
//The "problem" I am having, per-se, is "knowing" which "quotation marks"
//go with which words.

关于c# - 用于在匹配引号之间选择数据的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21102161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com