【问题标题】:Que about a unique thing in C#?对 C# 中的独特事物有疑问吗?
【发布时间】:2018-03-23 06:37:51
【问题描述】:

我有很多如下代码:

AppUtility.EnumToBool(Row["block_friends"].ToString())

我需要将它们转换成这样的东西。

AppUtility.EnumToBool(Row["block_friends"].ToString() == "1")

问题是,我有大约 500 个这样的实例,我想知道是否有自动替换这些实例的方法?

对于 C# 代码,我需要使用 Visual Studio IDE 中的 Find+Replace 来执行此操作。

我现在有了查找部分:AppUtility\.EnumToBool\((.*)\),但没有该值的正则表达式。

【问题讨论】:

  • 你不能用Row["block_friends"].ToString() == "1" 查找和替换AppUtility.EnumToBool(Row["block_friends"].ToString()) 还是我错过了什么?
  • block_friends 并不总是相同,传递给 EnumToBool 的值并不总是相同。
  • Notepad++ 可以轻松做到这一点,但这取决于您的 EnumToBool 是如何传递这个值的?你有那个清单吗?
  • 对于正则表达式问题,最好提供正则表达式通过和失败的多个场景。
  • @PirateX 它传递一个字符串,但在编程中不可能列出可以传递字符串的每一种方式。

标签: c# regex visual-studio


【解决方案1】:

在 VS2010 中工作的答案:

1。在某处测试正则表达式

我建议使用Regex101 来完成这项任务。只需将示例文本放在顶部,然后将模式放在顶部,看看它是否有效。 This is my result。您可以看到常规文本和变化的文本被捕获在不同的组(颜色)中。

2。重写正则表达式以匹配 VS IDE 正则表达式

存在差异。我在 regex101 中使用了(.*) 来对组内的字符进行分组。在 VS IDE 中,必须重写为{.*}。如果您想在“替换为”模式中重用该组,则需要在 VS IDE 中编写 \1(而不是在其他地方编写 $1)。

来自 regex101 的源查找模式: AppUtility\.EnumToBool\(Row\[(.*)\]\.ToString\(\)\)

VS IDE 查找模式: AppUtility\.EnumToBool\(Row\[{.*}\]\.ToString\(\)\)

VS IDE 替换为模式: Row[\1].ToString() == "1"

(已更新)3. 在 IDE 中使用它,看看会发生什么

查找模式: AppUtility\.EnumToBool\((.*)(\))([^\)])

细分:

  1. AppUtility\.EnumToBool\( - 字面意思是 AppUtility.EnumToBool
  2. (.*) - 在方法中捕获组,但需要 3. 才能工作
  3. (\))([^\)]) - 捕获) 字符,并确保另一个字符不是)(如果有多个)s

VS IDE:

AppUtility\.EnumToBool\({.*}{\)}{[^\)]}

用 VS IDE 替换:

AppUtility.EnumToBool(\1)=="1"\2\3

细分:

AppUtility.EnumToBool(\1)=="1" - 在最后一个 ( 之前添加 =="1" \2\3 - 添加剩余的字符,所以什么都不吃

旧的错误示例,仅显示替换窗口:

【讨论】:

  • 感谢您的回答,尽管传递给 EnumToBool 的值并不总是相同的,但它甚至不接近相同。有时它通过一行传递,有时它通过一个方法传递。我只需要忽略它是如何传递给EnumToBool 的,只需删除该方法并用运算符替换即可。
  • 我现在有了查找部分:AppUtility\.EnumToBool\((.*)\),但没有该值的正则表达式。
  • 您能否提供示例文本行并将其发布到 regex101 上以便更容易找到所需内容?
  • 出于某种原因不仅检测某些行,但我们开始了。 regex101.com/r/tvF8TN/1
  • 如果您在正则表达式中使用了Ungreedy 标志,它不会在一个中捕获多个结果。实际上,您提供的行没有任何共同点。发布捕获AppUtility.EnumToBool(something)的更新,希望对您有所帮助。
【解决方案2】:

你可以替换

^AppUtility\.EnumToBool\((.*)\)$

\1 == "1"

【讨论】:

  • 这似乎不起作用,它表明未找到文本,即使启用正则表达式也是如此。
  • 我已经更新了我的问题,也许你可以看看我的意思。
  • 我现在有了查找部分:AppUtility\.EnumToBool\((.*)\),但没有该值的正则表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多