【问题标题】:String manipulation - c# and gmail字符串操作 - c# 和 gmail
【发布时间】:2015-04-14 12:38:04
【问题描述】:

我试图做一些研究,但我发现的所有内容都没有涵盖我目前的困境。

字符串操作是基本的吧?但这是我的问题,我从 gmail 获取电子邮件正文,正文看起来像这样(删除所有 HTML 格式后,是一个常量字符串): 名称 : Testy Von Test 单元格 1111111111 电子邮件 testy@testy

现在我需要找到字符串“Name”,然后使用 trimming 得到全名,但是如何区分呢?如何告诉我的编码查找从名称到 Cell 的所有内容并从那里获取所有内容?我确实确实试图找到解决方案,因为我相信我只是想念一些逻辑。如果你只是给我一个文章的链接,我会很乐意自己阅读并应用逻辑(我不希望任何人为我做我的工作),我只需要在正确的方向上进行适当的推动。

提前感谢您。

(作为编辑,如果有人应该关注这个问题,请查看所有答案,有很多惊人的答案和想法)

【问题讨论】:

  • 您的电子邮件正文是否总是名称后跟数字字符?比如“Testy Von Test Cell”后跟“1111111111”?
  • 你试过String.IndexOf吗?
  • 如果您对正则表达式感觉很强大,这将是您问题的解决方案。这是一个示例:dotnetperls.com/regex-match.
  • 据我测试,是的。
  • 好吧,现在看看 regex 示例,运行一些测试应用程序,看看 regex 和 string.Indexof 是如何工作的。感谢所有帮助和快速响应。

标签: c# gmail


【解决方案1】:

您的字符串格式似乎不是很好。名称后跟冒号,Cell 不是...这可能会变得非常棘手...

但使用子字符串的简单解决方案。

var s = "Name : Testy Von Test Cell 1111111111 email testy@testy";
var name = s.Substring(
    s.IndexOf(":")+1,
    s.IndexOf("Cell")-s.IndexOf(":")-1);

【讨论】:

  • 这确实很棘手,我有时用“*”代替冒号或几个空格,但我认为删除 * 和奇怪的格式应该很简单,在我有了我的价值观之后.谢谢你,我正在应用你的答案并研究 cmets 解决方案,一旦我有解决方案,我会回复你。非常感谢您的帮助,我衷心感谢。
  • 嗨 XenoPuTtSs,非常感谢您的解决方案,它让我思考我需要对那个字符串做些什么,因为有时它是 Cell,有时它是手机号码,所以在尝试之前为了获得这些值,我试图获得尽可能多的差异,然后我运行一个方法来替换某些东西,例如我用空格替换冒号,用 Cell 替换手机号码等。然后我使用你的编码作为获得我需要的一切的基线。非常感谢您的帮助和回答,我知道这个问题不是直截了当的,感谢您的理解和抽出时间
【解决方案2】:

您的邮件正文是否始终采用准确的格式?

例如,您可以按照jsfiddle 中所示的方式进行操作。

var mailbody = 'Name : Testy Von Test Cell 1111111111 email testy@testy';
var nameregex = /Name(.+?)Cell/
var match = nameregex.exec(mailbody);
console.log(match[1]); // Outputs " : Testy Von Test "

在您的示例中,它会捕获,如控制台输入中所见,“ : Testy von test ”。然后你可以随心所欲地操纵它。您还可以使用其他选项修改正则表达式,具体取决于您的邮件输出如何变化。

var mailbody = 'Name : Testy Von Test Cell 1111111111 email testy@testy';
var nameregex = /Name\s:\s(.+?)\sCell/
var match = nameregex.exec(mailbody);
console.log(match[1]); // Outputs "Testy Von Test"

【讨论】:

  • 您好 Robin,非常感谢您抽出宝贵时间帮助我解决我的问题,我理解这个问题含糊不清,需要考虑的变量太多,并真诚地感谢您的意见和帮助。由于无法保证格式始终相同,因此我决定使用建议的 XenoPuTtSs,因此我对字符串进行了一些清理,然后从那里使用子字符串。我仍在研究我的固体解决方案(^^,)。但感谢您的帮助,它很有价值,非常感谢。
【解决方案3】:

这个呢:

int start = myString.IndexOf("Name") + "Name : ".Length;
int len = myString.IndexOf("Cell") - start;

string res = myString.Substring(start, len);

或者通过正则表达式:

Regex r = new Regex("Name(.*)Cell");
string res = r.Matches[0].Value;

【讨论】:

  • 他最好希望他永远不会收到来自 Dave Cellington 的电子邮件。推荐使用 LastIndexOf 而不是 IndexOf
  • 呵呵呵呵,好吧,我们都可以同意输入字符串很差。我们也不知道 Cell 是否总是第二个字段。
  • @XenoPuTtSs 当然这段代码是基于 OP 的输入
  • 根据OP的输入,得到名字的代码是:var fullName = "Testy Von Test";
  • 非常感谢您的回复,我知道输入字符串简直太可怕了,要完成这项工作有点像噩梦。非常感谢您的帮助,我非常感谢您抽出时间来帮助我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 2015-02-10
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多