帮助操作一些字符串

Ale*_*lex 8 c# string

我的字符串属于这种类型:City (PR)来自数据库,PR代表省.

最后我想要两个独立的变量.城市和公关.

我必须用C#做到这一点.任何的想法?谢谢.

dtb*_*dtb 14

假设城市不包含(字符:

string s = "City (PR)";
int p = s.LastIndexOf("(");

string city = s.Substring(0, p).Trim();
string province = s.Substring(p + 1, s.Length - p - 2).Trim();
Run Code Online (Sandbox Code Playgroud)

city是第一个字符的子字符串,但不包括最后一个(字符.
province是从最后一个(到最后一个字符后面的第一个字符的子字符串.

  • +1干净整洁,更好地处理城市名称; 可能会考虑使用[`LastIndexOf`](http://msdn.microsoft.com/en-us/library/0w96zd3d.aspx)使其更加健壮 (2认同)

Jul*_*rau 14

您可以使用正则表达式和命名组.

string resultString = "New York (New York)";
Regex regexObj = new Regex(@"(?<City>[^(]*)\((?<PR>[^)]*)\)",RegexOptions.IgnoreCase);

var match = regexObj.Match(subjectString);
if (match.Success)
{
  string city = match.Groups["City"].Value.Trim();
  string province = match.Groups["PR"].Value;
}
Run Code Online (Sandbox Code Playgroud)

正则表达式解释

(?<City>[^(]*)\((?<PR>[^)]*)\) :

  • (?<City>XXX) 定义一个名为City的组
    • [^(]*匹配任何不在(0和无限时间之间的字符
  • \(匹配(一次
  • (?<PR>XXX) 定义名为PR的组
    • [^)]*匹配任何不在)0和无限时间之间的字符
  • \)匹配)一次


Kir*_*ein 10

正则表达式?

您可以将模式划分为捕获组并从那里开始.

(.*)(\(.*\))
Run Code Online (Sandbox Code Playgroud)

这将捕获第一组中的城市和第二组中的PR /省份.

编辑:madgnomes正则表达式从匹配中删除了paratheneses,即使正则表达式在这一点上变得可怕:)

  • 难道你不应该逃避外面的parens所以捕获组只有"PR",而不是"(PR)"? (3认同)