【问题标题】:Characters between two exact characters [closed]两个确切字符之间的字符[关闭]
【发布时间】:2013-08-17 18:32:35
【问题描述】:

让我告诉你我想做什么......

例如,我有这个作为输入

......1.......1.................

而我想做的是

.......1111111..................

所以我想用一个来填充两个之间的空间......

这也应该可以做到:

......11.....1..................
........11111...................

所以我只想要里面...

您可以提供任何 C# 帮助吗?

【问题讨论】:

  • 你的输入是二进制还是任何可能的字符串?
  • 怎么样......1.......1.......1............?
  • 我试过这个......但这只给了我第一个例子的点..如果有 2 个一致的点它失败.. string output = convert.Split(new char[] { ' 1', '1' })[1];
  • 输入为字符串。并且应该只有一个空格..你不能有另一个空格

标签: c# regex string


【解决方案1】:

这可以在不需要正则表达式的情况下更容易解决:您只想“反转”由第一次和最后一次出现的“1”分隔的字符串区域。

这是一个示例解决方案:

string input = "..........1............1...";
int start = input.IndexOf('1');
int end = input.LastIndexOf('1');

char[] content = input.ToCharArray();
for (int i = start; i <= end; i++)
{
    content[i] = content[i] == '1' ? '.' : '1'; //invert
}
string output = new string(content);

【讨论】:

  • 谢谢你 :) 完美!但是还有一件事......这个............11111......如何只打印点,因为之间没有空间?
  • 正确。你也可以自己尝试一下;-)
  • 对不起,我还是没听懂.. 输入可以是............11111................1............1... 这种格式,它应该会自动做正确的事情...
  • 确实如此 - 你能举个例子说明这不起作用吗?
  • Blaaaa... 我的坏人.. 它真的有效.. 再次感谢 :)
【解决方案2】:

正则表达式方式:

多行模式:

pattern: (?>(?<=^\.*)|\G)1(?=1*(\.))|\G(?<!^)\.(?=\.*(1))
replacement: $1$2

示例:

string pattern = @"(?>(?<=^\.*)|\G)1(?=1*(\.))|\G(?<!^)\.(?=\.*(1))";
string input = @"......1.......1.................
......11.....1..................
......11111111..................";
string replacement = "$1$2";
Regex rgx = new Regex(pattern, RegexOptions.Multiline);
string result = rgx.Replace(input, replacement);

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 2014-02-26
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多