c# - 匹配不以空格开头或结尾的字符串的正则表达式

标签 c# regex whitespace startswith ends-with

我需要一个正则表达式来确保字符串不以空格开头或结尾。我不在乎它的“中间”是否有空格,只是不在开头或结尾。

我有一个几乎有效的正则表达式:

^\S.*\S$

以下是一些示例结果:

"HELLO" (Match)
"HEL LO" (Match)
" HELLO" (No Match)
"HELLO " (No Match)
"H" (No Match)

如您所见,我遇到的问题是,当字符串只有 1 个字符长(上例中的“H”)时,它不会返回匹配项。

如何修改正则表达式来处理字符串长度为 1 的情况?

谢谢

注意 - 我将此数据保存到 Xml 文件中,因此我需要一个模式来匹配 Xml 架构中的相同内容。我不确定它是否与 C# 中使用的 Regex 相同。

如果有人可以向我提供在我的架构中使用的模式,我将不胜感激!

最佳答案

你可以这样做:

^\S(.*\S)?$

它将匹配单个非空格字符,后跟可选的零个或多个字符,后跟单个非空格字符。


更新

鉴于您说这是用于 XML 模式验证,我使用此模式对其进行了测试:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="xml">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="test" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:attribute name="value">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:pattern value="\S(.*\S)?"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

对照此示例文档

<xml>
  <test value="HELLO"/>    <!-- MATCH -->
  <test value="HEL LO"/>   <!-- MATCH -->
  <test value="HELLO "/>   <!-- ERROR -->
  <test value=" HELLO"/>   <!-- ERROR -->
  <test value="H"/>        <!-- MATCH -->
</xml>

看来,如果您只是删除开始/结束括号。它有效。

关于c# - 匹配不以空格开头或结尾的字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17768298/

相关文章:

regex - 使用正则表达式提取字符串可检索 'True 111499'

swift - 在swift中添加制表符

git - `git difftool` 和名称文件中的空格

c# - 包含 "filter"的 CONTAINS 方法的 LINQ 语法

C#,Process.Start隐藏?

c# - 对每个方法的返回值的操作

java - 正则表达式在循环中使用 find 方法仅匹配一次

正则表达式捕获从特定表达式到 Perl 中第一个空行的多行

javascript - 将单词与旁边的空格匹配

c# - 数据转换失败。 [ OLE DB 状态值(如果已知)= 2 ]