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

本文关键字:结尾 字符串 正则表达式 开头 空格 | 更新日期: 2023-09-27 18:24:00

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

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

^'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>

因此,如果您简单地删除起始/结束括号,则会出现这种情况。它有效。

您使用环视断言,因为它们是零宽度:

^(?='S).*(?<='S)$

不过,使用否定断言和正字符类可能会更好:

^(?!'s).*(?<='s)$