我想获取_T("内部所有内容")中的“内部所有内容”
_T("_T()")这种情况如果也要去获取,应该怎么写想这种结果应该是:"_T()"
这正则应该怎么写呢我的DEMO还有问题:
WPF的:
xaml:<Window x:Class="RegexpTestingProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button x:Name="btn1" Content="Button" HorizontalAlignment="Left" Margin="200,219,0,0" VerticalAlignment="Top" Width="75"/>
<TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="156" Margin="40,34,0,0" TextWrapping="Wrap" Text="TextBox_T('test1')('test2')" VerticalAlignment="Top" Width="417"/> </Grid>
</Window>.cs:using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Documents;namespace RegexpTestingProject
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private const string p1 = "_T\\(\"(.*)\"\\)";
private const string p2 = "(_T\\('([^\\('\\)]+)'\\))|(_T\\(\"([^\\(\"\\)]+)\"\\))"; private Regex r1;
private Regex r2; public List<Regex> rs; public MainWindow()
{
InitializeComponent();
this.textBox1.Text = "_T(\"这是带有\"号的字符串内容,不可以配置,但我也想配置\")_T('这是带有'号字符串内容,不可以配置,但我也想配置')";
this.textBox1.Text += "_T(\"这是没有带双引号,并使用双引号引起来的字符串内容,可以匹配\")_T('这是没有带单引号,并使用单引号引起来的字符串内容,可以匹配')";
this.textBox1.Text += "_T(\"test3\")\n(\"tes\n_T('test5')\nt\n_T(\"test6\")\n4\")";
this.btn1.Click += btn1_Click; r1 = new Regex(p1);
r2 = new Regex(p2, RegexOptions.Multiline); rs = new List<Regex>(new Regex[] {
//r1,
r2
});
} void btn1_Click(object sender, RoutedEventArgs e)
{
string txt = this.textBox1.Text; List<string> result = pickUpAllLanguageStr(txt);
string reusltStr = string.Empty;
foreach (var item in result)
{
reusltStr += "\t" + item + "\n";
} MessageBox.Show("\npick up result : " + reusltStr);
} public List<string> pickUpAllLanguageStr(string inputTxt)
{
List<string> result = new List<string>();
foreach (var r in rs)
{
MatchCollection mc = r.Matches(inputTxt);
for (int i = 0; i < mc.Count; i++)
{
var g1 = mc[i].Groups[2].Value;
if (string.IsNullOrEmpty(g1))
{
g1 = mc[i].Groups[4].Value;
}
if (string.IsNullOrEmpty(g1))
{
continue;
}
if (!result.Contains(g1))
{
result.Add(g1);
}
}
}
return result;
}
}
}运行结果,截图:
C#正则正则表达式
_T("_T()")这种情况如果也要去获取,应该怎么写想这种结果应该是:"_T()"
这正则应该怎么写呢我的DEMO还有问题:
WPF的:
xaml:<Window x:Class="RegexpTestingProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button x:Name="btn1" Content="Button" HorizontalAlignment="Left" Margin="200,219,0,0" VerticalAlignment="Top" Width="75"/>
<TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="156" Margin="40,34,0,0" TextWrapping="Wrap" Text="TextBox_T('test1')('test2')" VerticalAlignment="Top" Width="417"/> </Grid>
</Window>.cs:using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Documents;namespace RegexpTestingProject
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private const string p1 = "_T\\(\"(.*)\"\\)";
private const string p2 = "(_T\\('([^\\('\\)]+)'\\))|(_T\\(\"([^\\(\"\\)]+)\"\\))"; private Regex r1;
private Regex r2; public List<Regex> rs; public MainWindow()
{
InitializeComponent();
this.textBox1.Text = "_T(\"这是带有\"号的字符串内容,不可以配置,但我也想配置\")_T('这是带有'号字符串内容,不可以配置,但我也想配置')";
this.textBox1.Text += "_T(\"这是没有带双引号,并使用双引号引起来的字符串内容,可以匹配\")_T('这是没有带单引号,并使用单引号引起来的字符串内容,可以匹配')";
this.textBox1.Text += "_T(\"test3\")\n(\"tes\n_T('test5')\nt\n_T(\"test6\")\n4\")";
this.btn1.Click += btn1_Click; r1 = new Regex(p1);
r2 = new Regex(p2, RegexOptions.Multiline); rs = new List<Regex>(new Regex[] {
//r1,
r2
});
} void btn1_Click(object sender, RoutedEventArgs e)
{
string txt = this.textBox1.Text; List<string> result = pickUpAllLanguageStr(txt);
string reusltStr = string.Empty;
foreach (var item in result)
{
reusltStr += "\t" + item + "\n";
} MessageBox.Show("\npick up result : " + reusltStr);
} public List<string> pickUpAllLanguageStr(string inputTxt)
{
List<string> result = new List<string>();
foreach (var r in rs)
{
MatchCollection mc = r.Matches(inputTxt);
for (int i = 0; i < mc.Count; i++)
{
var g1 = mc[i].Groups[2].Value;
if (string.IsNullOrEmpty(g1))
{
g1 = mc[i].Groups[4].Value;
}
if (string.IsNullOrEmpty(g1))
{
continue;
}
if (!result.Contains(g1))
{
result.Add(g1);
}
}
}
return result;
}
}
}运行结果,截图:
C#正则正则表达式
带有:html标签,并同时,有双引号、单引号等:
_T("<font color='#ff0000'>这是红色的字,而且还有双引号:\",还有单引号:'</font>")
或是单引号的写法:
_T('<font color="#ff0000">这是红色的字,而且还有双引号:\',还有单引号:"</font>')
//\"_T(_T('测试'))\"
string str=@"_T(""_T(_T('测试'))"")"; str = Regex.Match(str, @"(?i)_t\(((?<O>_t\()|(?<-O>\))|[\s\S]+)*(?(O)(?!))\)").Groups[1].Value;// //\"_T(_T('测试'))\"
谢谢您的回复:我使用您写的正则后,匹配出来的,会把一些连续的_T("xxx")文件信息也配置进去了:结果如下:
"\"这是带有\"号的字符串内容,不可以配置,但我也想配置\")_T('这是带有'号字符串内容,不可以配置,但我也想配置')_T(\"这是没有带双引号,并使用双引号引起来的字符串内容,可以匹配\")_T('这是没有带单引号,并使用单引号引起来的字符串内容,可以匹配')_T(\"test3\")_T(\"test3\")_T(\"test3\")\n(\"tes\n_T('test5')\nt\n_T(\"test6\")\n4\""但正确结果应该是:
_T(\"这是带有\"号的字符串内容,不可以配置,但我也想配置\")
中的
这是带有\"号的字符串内容,不可以配置,但我也想配置总结说明:假设:string txt = "_T(\"123\")_T(\"321\")";配置结果应该会有两个:
1、123
2、321但是您的匹配后,会得到:123")_T("321
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Documents;namespace RegexpTestingProject
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private const string p1 = "_T\\(\"(.*)\"\\)";
private const string p2 = "(_T\\('([^\\('\\)]+)'\\))|(_T\\(\"([^\\(\"\\)]+)\"\\))";
private const string p3 = @"(?i)_t\(((?<O>_t\()|(?<-O>\))|[\s\S]+)*(?(O)(?!))\)"; // p3与p4结果一样
private const string p4 = "(?<=_T\\().*?(?=\\))"; private Regex r1;
private Regex r2;
private Regex r3;
private Regex r4; public List<Regex> rs; public MainWindow()
{
InitializeComponent();
this.textBox1.Text = "_T(\"123\")\n_T(\"321\")";
this.btn1.Click += btn1_Click; r1 = new Regex(p1);
r2 = new Regex(p2, RegexOptions.Multiline);
r3 = new Regex(p3, RegexOptions.Multiline);
r4 = new Regex(p3, RegexOptions.Multiline); rs = new List<Regex>(new Regex[] {
//r1,
//r2
//r3
r4
});
} void btn1_Click(object sender, RoutedEventArgs e)
{
string txt = this.textBox1.Text; List<string> result = pickUpAllLanguageStr(txt);
string reusltStr = string.Empty;
foreach (var item in result)
{
reusltStr += "\t" + item + "\n";
} MessageBox.Show("\npick up result : " + reusltStr); // p3,p4结果:resultStr = "\t\"123\")\n_T(\"321\"\n"
// 如果我使用我的p2,还是可以匹配到:123,321两个
} public List<string> pickUpAllLanguageStr(string inputTxt)
{
List<string> result = new List<string>();
foreach (var r in rs)
{
MatchCollection mc = r.Matches(inputTxt);
for (int i = 0; i < mc.Count; i++)
{
var g1 = mc[i].Groups[1].Value;
if (string.IsNullOrEmpty(g1))
{
g1 = mc[i].Groups[4].Value;
}
if (string.IsNullOrEmpty(g1))
{
continue;
}
if (!result.Contains(g1))
{
result.Add(g1);
}
}
}
return result;
}
}
}
string txt = "_T(\"123\")\n_T(\"321\")"的时候:与1楼Return_false的效果一样