如果匹配特定条件,如何 select 正则表达式中的特定字符
How to select a specific character in regex if it match certain conditions
我正在尝试从字符串中查找破折号 -
,前提是它符合特定条件并且正则表达式只应选择破折号。
应选案例-
- 如果双方都有space。示例:
test - dash
- 如果右手边有space。示例:
test- dash
- 如果双方都没有space。示例:
test-dash
不应选择的情况
- 如果右边没有space,但是左边有space。示例:
test -dash
这是我的进度
如截图所示,我可以用positive-lookbehind
实现,但这并没有得到广泛支持。
所以,我的问题是,是否有另一种方法可以在不使用 positive-lookbehind
的情况下实现这一目标?
谢谢。
这应该有效:
\S+( ?)-(| )\S+
https://regex101.com/r/XI6W4R/1
它使用第一个捕获组来知道破折号之前是否有space。如果有,则破折号后必须有一个 space。否则,破折号后的 space 是可选的。
反向引用比正向后视得到更广泛的支持(根据此Regular Expression Engine Comparison Chart)。
I'm trying to ONLY have the - selected. instead of the whole thing
在这种情况下,我的知识仅限于提供以下正则表达式的使用
\S+( ?)(-)(| )\S+
并使用捕获组 2 查找破折号。如果不知道使用此正则表达式的确切方式,也很难提供更好的建议。
您可以使用
-(?!(?<=\s-)\S)
参见regex demo。
详情:
-
- 一个连字符
(?!(?<=\s-)\S)
- 后面没有紧跟着一个非白色的 space 字符(也就是说,右边必须有一个 space 或字符串结尾)反过来,紧接在白色 space 和 -
字符之前。
对于示例数据,如果您不能使用后视,也许使用单词边界就足够了。
-(?=\s)|\b-(?=[^\s-])
说明
-(?=\s)
匹配 -
并在右侧声明一个空白字符
|
或
\b-(?=[^\s-])
字边界,匹配 -
并在右侧断言除 -
之外的非空白字符
我正在尝试从字符串中查找破折号 -
,前提是它符合特定条件并且正则表达式只应选择破折号。
应选案例-
- 如果双方都有space。示例:
test - dash
- 如果右手边有space。示例:
test- dash
- 如果双方都没有space。示例:
test-dash
不应选择的情况
- 如果右边没有space,但是左边有space。示例:
test -dash
这是我的进度
如截图所示,我可以用positive-lookbehind
实现,但这并没有得到广泛支持。
所以,我的问题是,是否有另一种方法可以在不使用 positive-lookbehind
的情况下实现这一目标?
谢谢。
这应该有效:
\S+( ?)-(| )\S+
https://regex101.com/r/XI6W4R/1
它使用第一个捕获组来知道破折号之前是否有space。如果有,则破折号后必须有一个 space。否则,破折号后的 space 是可选的。
反向引用比正向后视得到更广泛的支持(根据此Regular Expression Engine Comparison Chart)。
I'm trying to ONLY have the - selected. instead of the whole thing
在这种情况下,我的知识仅限于提供以下正则表达式的使用
\S+( ?)(-)(| )\S+
并使用捕获组 2 查找破折号。如果不知道使用此正则表达式的确切方式,也很难提供更好的建议。
您可以使用
-(?!(?<=\s-)\S)
参见regex demo。
详情:
-
- 一个连字符(?!(?<=\s-)\S)
- 后面没有紧跟着一个非白色的 space 字符(也就是说,右边必须有一个 space 或字符串结尾)反过来,紧接在白色 space 和-
字符之前。
对于示例数据,如果您不能使用后视,也许使用单词边界就足够了。
-(?=\s)|\b-(?=[^\s-])
说明
-(?=\s)
匹配-
并在右侧声明一个空白字符|
或\b-(?=[^\s-])
字边界,匹配-
并在右侧断言除-
之外的非空白字符