【问题标题】:VB.Net Need to check if a string contains only one word but can contain punctuationVB.Net 需要检查一个字符串是否只包含一个单词但可以包含标点符号
【发布时间】:2025-12-26 15:25:07
【问题描述】:

我需要检查我的用户是否在文本框中只插入了 1 个单词。 这个词可以包含标点符号。以下是一些可以插入和不能插入的示例:

不能插入(多字):

  • “你好”

可插入(单个词、句尾、句首):

  • “单词”
  • “结束。”
  • ".开始"
  • “!!它”
  • “结束!!”

我正在为我需要做的检查而苦苦挣扎。我已经有了: Regex.Matches(word, "\S+") 它检查插入了多少个单词。但是如何检查是否有标点符号?因为“.start”返回 2 个单词,但这是有效的。

谢谢

【问题讨论】:

  • 用标点符号分隔的字符(尽管很奇怪)是有效的还是无效的?例如:“abc!xyz”——是一两个词吗? EG 您是否正在寻找一种情况,其中至少有一个空格的字符块使其无效,其他一切都有效?

标签: regex vb.net words


【解决方案1】:

您可以使用\p{L} 类来允许字母,使用\p{P} 来允许标点符号,并使用锚点来标记字符串的开始和结束。可选组将确保我们捕获两端的标点符号:

^(?:\p{P}+\s*)*[\p{P}\p{L}]+(?:\s*\p{P}+)*$

请参阅 demoanother demo on regexstorm(我必须在其中添加 \r? 以显示该站点上带有多行标志的所有匹配项)。

要排除单词内部有标点符号的情况(例如new!word),请使用

^(?:\p{P}+\s*)*\p{L}+(?:\s*\p{P}+)*$

但是这将不允许使用连字符。

demo 2

【讨论】:

  • 它对你有用吗?您遇到的问题需要更多帮助吗?
【解决方案2】:
^((\W*\w+)|(\w+\W*))$

^ 开始
\W* 只允许从 0 到无限次的非单词字符
\w+ 只允许从 1 到无限次的单词字符
| 交替$结束

【讨论】:

    最近更新 更多